Как проверить, вызывается ли Application_BeginRequest для статических ресурсов, таких как изображения, на реальном веб-сервере IIS?
У нас есть веб-сайт ASP.NET 4.0, и мы используем событие Application_BeginRequest в Global.asax для некоторых интеллектуальных перенаправлений. При отладке решения на локальном сервере разработки ASP.NET, предоставляемом Visual Studio (без IIS), Application_BeginRequest вызывается как для страниц apsx, так и для статических ресурсов, таких как файлы css, изображения jpg / gif и т. Д., Которые содержат наши страницы.
Это известная проблема, но как насчет реального хостинга IIS нашего провайдера хостинга (Windows 2008/IIS 7.0)? Как мы можем проверить, происходит ли это для статических ресурсов? И как это запретить?
2 ответа
Все запросы будут проходить через Application_BeginRequest, если вы не укажете веб-серверу вести себя по-другому, установив для runAllManagedModulesForAllRequests значение false.
<system.webServer>
<modules runAllManagedModulesForAllRequests="false" />
</system.webServer>
Если у вас нет доступа к web.config, вы можете настроить быстрый тест: опубликовать два разных изображения: redirect.jpg и noredirect.jpg и установить перенаправление в Application_BeginRequest и посмотреть, происходит это или нет.
var url = ((System.Web.HttpApplication)sender).Request.Url;
if (url.EndsWith("noredirect.jpg"))
{
Response.Redirect(url.replace("noredirect.jpg","redirect.jpg"));
}
Затем попробуйте получить доступ к «noredirect.jpg», если вместо этого отображается «redirect.jpg», значит, перенаправление в действии (= настройка по умолчанию)
Ты можешь попробовать;
if (Request.Path.ToLowerInvariant().IndexOf(".aspx") > -1)
{
// static files
}