是否可以在Asp .NET MVC 2中的Global.asax.cs中的EndRequest处理程序中识别当前请求是否由mvc控制器处理而不是获取某些资源文件(js,css,image)的请求?我还有什么兴趣,即使使用控制器生成响应但是没有从OutputCache提供响应,也可以这样做。
答案 0 :(得分:1)
我认为您可以在Global.asax的Application_EndRequest中运行此代码:this.Context.Handler is MvcHandler
。
如果你想在Routes上迭代,你可以这样做:
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;
}
}
}
如果我没记错,如果与上下文不匹配,则路径将为NULL,但是您应该运行此代码并对其进行测试。
FYI忽略的路线实施StopRouteHandler。 MvcRoutees实施MvcRouteHandler。还有一些其他处理程序,如PageRouteHandler和ResourceRouteHandler。
更新
顺便说一下,如果你打算使用这个搜索,我会添加一个哈希或一些缓存方法,所以你不要每次迭代路由。