2011-03-14 90 views
2

我有一个HttpHandler应用程序,它处理.js文件的任何请求。我只希望这个处理程序处理在应用程序根目录中请求的* .js文件。在web.config处理程序映射中指定应用程序根目录

的处理程序映射看起来是这样的:

<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.

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

回答

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 
    } 
} 
+0

我之前做过的几乎完全是为了临时解决这个问题。 – mikefrey 2011-03-14 21:43:29

0

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

它应该是在默认情况下相对路径的工作...

+1

没有。这将导致它从服务器根目录[http://localhost/*.js](http://localhost/*.js)处理,而不是应用程序根目录[http:// localhost/myapps/approot/*。 js](http://localhost/myapps/approot/*.js) – mikefrey 2011-03-14 19:56:15

相关问题