在Asp .NET MVC 2中的Global.asax.cs中识别MVC请求

时间:2011-03-22 12:58:12

标签: c# asp.net-mvc asp.net-mvc-2 caching outputcache

是否可以在Asp .NET MVC 2中的Global.asax.cs中的EndRequest处理程序中识别当前请求是否由mvc控制器处理而不是获取某些资源文件(js,css,image)的请求?我还有什么兴趣,即使使用控制器生成响应但是没有从OutputCache提供响应,也可以这样做。

1 个答案:

答案 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。

更新

顺便说一下,如果你打算使用这个搜索,我会添加一个哈希或一些缓存方法,所以你不要每次迭代路由。