Возможно, в обработчике EndRequest в Global.asax.cs в Asp .NET MVC 2 есть ли текущий запрос, обработанный контроллером mvc, а не запрос для получения некоторого файла ресурсов (js, css, изображения)? Что меня больше интересует, возможно ли это сделать, даже когда ответ был однажды сгенерирован с помощью контроллера, но не доступен из OutputCache.Идентифицировать запрос MVC в Global.asax.cs в Asp .NET MVC 2
0
A
ответ
1
Я думаю, что вы можете запустить этот код: 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.
Update:
Кстати, я хотел бы добавить хэш или какой-либо метод кэширования, если вы планируете использовать этот поиск, так что вы не перебирать маршруты каждый раз.
Проблема в том, что this.Context.Handler имеет значение NULL, когда контент отправляется из OutputCache. Мне нужно решение для работы с OutputCache. – mgamer
Хмм, я не знал этого ... Я немного оглянусь. – Linkgoron
BTW Если вы не отключили заголовок MVC X-AspNetMvc-Version, вы также можете использовать его, поскольку заголовки также кэшируются. Просто используйте Response.Headers.Get («X-AspNetMvc-Version») EndRequest ... Я все еще ищу лучшее решение ... – Linkgoron