0
Asp.net MVC 2中的Global.asax.cs中的EndRequest處理程序有可能識別當前請求是由mvc控制器處理而不是由請求處理獲取一些資源文件(js,css,圖像)?還有什麼讓我感興趣的是,即使使用控制器產生了一次響應,但不是從OutputCache提供響應,也可以這樣做。在Asp.Net中的Global.asax.cs中識別MVC請求MVC 2
Asp.net MVC 2中的Global.asax.cs中的EndRequest處理程序有可能識別當前請求是由mvc控制器處理而不是由請求處理獲取一些資源文件(js,css,圖像)?還有什麼讓我感興趣的是,即使使用控制器產生了一次響應,但不是從OutputCache提供響應,也可以這樣做。在Asp.Net中的Global.asax.cs中識別MVC請求MVC 2
我認爲您可以在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。
更新:
順便說一句,我想補充一個散列或一些緩存的方法,如果你打算使用這個搜索,這樣你就不會在每次航線迭代時間。
問題是,當OutputCache提供內容時,this.Context.Handler爲null。我需要一個解決方案來處理OutputCache。 – mgamer 2011-03-22 13:28:52
嗯,我不知道這個......我會環顧一下。 – Linkgoron 2011-03-22 13:45:01
順便說一句如果你還沒有禁用MVC X-AspNetMvc-Version標題,你也可以使用它,因爲標題也被緩存。只需使用Response.Headers.Get(「X-AspNetMvc-Version」)EndRequest ...我仍然在尋找更好的解決方案... – Linkgoron 2011-03-22 14:13:58