2011-03-22 40 views
0

Asp.net MVC 2中的Global.asax.cs中的EndRequest處理程序有可能識別當前請求是由mvc控制器處理而不是由請求處理獲取一些資源文件(js,css,圖像)?還有什麼讓我感興趣的是,即使使用控制器產生了一次響應,但不是從OutputCache提供響應,也可以這樣做。在Asp.Net中的Global.asax.cs中識別MVC請求MVC 2

回答

1

我認爲您可以在Global.asax的Application_EndRequest中運行此代碼:this.Context.Handler is MvcHandler

如果你想重複自己在路線,你可以做這樣的事情:

if(this.Context.Handler == null) 
{ 
      foreach (var route in RouteTable.Routes) 
      { 
       var foundRoute = route.GetRouteData(new HttpContextWrapper(Context)); 
       if(foundRoute==null) 
        continue;  

       if(foundRoute.RouteHandler is MvcRouteHandler) 
       { 
        // code 
        break; 
       } 
      } 
} 
如果我沒有記錯foundRoute將是NULL,如果不匹配的情況下,但你應該運行此代碼

和測試它。

FYI忽略的路線實施StopRouteHandler。 MvcRoutees實現MvcRouteHandler。還有其他一些處理程序,如PageRouteHandler和ResourceRouteHandler。

更新:

順便說一句,我想補充一個散列或一些緩存的方法,如果你打算使用這個搜索,這樣你就不會在每次航線迭代時間。

+0

問題是,當OutputCache提供內容時,this.Context.Handler爲null。我需要一個解決方案來處理OutputCache。 – mgamer 2011-03-22 13:28:52

+0

嗯,我不知道這個......我會環顧一下。 – Linkgoron 2011-03-22 13:45:01

+0

順便說一句如果你還沒有禁用MVC X-AspNetMvc-Version標題,你也可以使用它,因爲標題也被緩存。只需使用Response.Headers.Get(「X-AspNetMvc-Version」)EndRequest ...我仍然在尋找更好的解決方案... – Linkgoron 2011-03-22 14:13:58