我有一个带有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,你是我唯一的希望。
答案 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"
没有骰子?
默认情况下它应该使用相对路径...