在web.config处理程序映射中指定应用程序根目录

时间:2011-03-14 19:43:02

标签: asp.net iis-7 httphandler

我有一个带有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

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

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

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

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

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

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

帮助我Obi Wan Kenobi,你是我唯一的希望。

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

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

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