2011-03-22 1 views
0

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

ответ

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:

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

+0

Проблема в том, что this.Context.Handler имеет значение NULL, когда контент отправляется из OutputCache. Мне нужно решение для работы с OutputCache. – mgamer

+0

Хмм, я не знал этого ... Я немного оглянусь. – Linkgoron

+0

BTW Если вы не отключили заголовок MVC X-AspNetMvc-Version, вы также можете использовать его, поскольку заголовки также кэшируются. Просто используйте Response.Headers.Get («X-AspNetMvc-Version») EndRequest ... Я все еще ищу лучшее решение ... – Linkgoron