Определите запрос MVC в Global.asax.cs в Asp .NET MVC 2 - PullRequest
0 голосов
/ 22 марта 2011

Возможно ли в обработчике EndRequest в Global.asax.cs в Asp .NET MVC 2 определить, обрабатывается ли текущий запрос контроллером mvc, а не запросить какой-либо файл ресурсов (js, css, изображение)?Что еще меня интересует, возможно ли это сделать, даже если ответ был когда-то сгенерирован с использованием контроллера, но не был обработан из OutputCache.

1 Ответ

1 голос
/ 22 марта 2011

Я думаю, что вы можете запустить этот код: this.Context.Handler is MvcHandler в Application_EndRequest в Global.asax.

Если вы хотите пройтись по маршрутам, вы можете сделать что-то вроде этого:

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.

Обновление:

Кстати, я бы добавил хеш или какой-то другой метод кэширования, если вы планируете использовать этот поиск, чтобы не выполнять итерации по маршрутам каждый раз.

...