2011-03-14 65 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

相關問題