【问题标题】:Specify the application root in web.config handler mapping在 web.config 处理程序映射中指定应用程序根
【发布时间】:2011-03-14 19:43:02
【问题描述】:

我有一个带有 HttpHandler 的应用程序,可以处理对 .js 文件的任何请求。我只希望这个处理程序处理应用程序根目录中请求的 *.js 文件。

处理程序映射如下所示:

<add name="HandleJS" path="*.js" verb="*" type="MyApp.JsHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />

目前,此处理程序处理所有请求的 *.js 文件。这是我想要的行为示例。

此请求将由处理程序处理:
http://localhost/myapps/approot/script.js

而这个不会由处理程序处理:
http://localhost/myapps/approot/dontProcessMe/script.js

我真的很想避免在处理程序路径中包含完整的绝对路径,所以我先尝试了其他一些方法。

看起来add 元素的path 属性不允许使用~/ 应用程序根机制,因此设置path="~/*.js" 不起作用。

我还尝试复制 IIS 中内置的 StaticFile 处理程序并执行以下操作:

<add name="MyStaticFiles" path="*/*.js" verb="*" modules="StaticFileModule" />

<add name="MyStaticFiles" path="dontProcessMe/*.js" verb="*" modules="StaticFileModule" />

两者都只返回一个 HTTP 状态为 200 的空白响应。

帮助我欧比旺克诺比,你是我唯一的希望。

【问题讨论】:

    标签: asp.net iis-7 httphandler


    【解决方案1】:

    如果不需要处理,可以检查处理程序本身中的 RequestURL 返回实际文件吗?

    public void ProcessRequest(HttpContext context)
    {
        var applicationPath = context.Request.ApplicationPath;
        var pathAndQuery = context.Request.Url.PathAndQuery;
    
        var appRelativePath = pathAndQuery.Replace(applicationPath, "");
    
        var basePath = VirtualPathUtility.GetDirectory(appRelativePath);
    
        if (basePath != "/")
        {
            // load and return actual file
        }
        else
        {
            // custom logic
        }
    }
    

    【讨论】:

    • 我之前几乎就是这样做的,以暂时解决这个问题。
    【解决方案2】:

    path="/*.js" 没有骰子?

    默认情况下它应该使用相对路径...

    【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多