2016-05-18 9 views
1

Я пишу HttpModule. Я пытаюсь обнаружить, как обнаружить, что запрос относится к приложению MVC.Как обнаружить приложение MVC в HttpModule

Я подключен к некоторым из таких обработчиков.

public void Init(HttpApplication httpApp) 
{ 
    httpApp.PreRequestHandlerExecute += PreRequestHandlerExecute; 
    httpApp.PreSendRequestHeaders += PreSendRequestHeaders; 
    httpApp.PostRequestHandlerExecute += PostRequestHandlerExecute; 
} 

My PreRequestHandlerExecute нуждается в этом условном.

public void PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    if isMvc(HttpContext.Current)) 
    { 
     doSomethingSpecificToMvc() 
    } 

isMvc() выглядит любит это, полагаясь только на отсутствие расширения файла для обнаружения запроса MVC (который хромает).

private static bool isMvc(HttpContext ctx) 
{ 
    bool retVal = false; 
    if (string.IsNullOrEmpty(VirtualPathUtility.GetExtension(ctx.Request.ServerVariables["PATH_INFO"]))) 
    { 
     retVal = true; 
    } 

    return retVal; 
} 

Что было бы лучшим способом определить, что запрос относится к приложению MVC?

+1

Какова реализация doSomethingSpecificToMvc()? Мне любопытно, почему вы хотите сделать это необычное различие ... –

ответ

0

Лучшим способом было бы посмотреть HTTP-заголовок и посмотреть, есть ли запись, подобная этому.

X-AspNetMvc-Version 3.0

Вот обновленная версия isMvc, которая может работать на то, что вы делаете.

private static bool isMvc(HttpContext ctx) 
{ 
    bool retVal = false; 
    string []header = ctx.Request.Headers.AllKeys; 
    if (header.Contains("X-AspNetMvc")) 
    { 
     retVal = true; 
    } 

return retVal; 

}

+0

Хорошая мысль - к сожалению, мы подавляем заголовки для целей безопасности. –

0

Вы могли бы определить, если конечная точка является asp.net MVC приложения с помощью вызова конечной точки и проверок для X-AspNetMvc-версии в ответ. Нет требования, чтобы этот заголовок находился в ответе, он по умолчанию размещен по структуре. Вам придется найти такие хаки, потому что каждая инфраструктура будет иметь свою собственную систему маршрутизации и уникальные причуды.

0

Я обнаружил это. Если обработчик контекста заполнен, это работает.

private static bool isMvc(HttpContext ctx) 
{ 
    bool retVal = false; 
    if (ctx.Handler != null && ctx.Handler.ToString() == "System.Web.Mvc.MvcHandler") 
    { 
     retVal = true; 
    } 

return retVal; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^