HttpContext.RemapHandler должен изменить, какой обработчик обрабатывает запрос?
Документация MSDN гласит:
Метод HttpContext.RemapHandler - позволяет указать обработчик для запроса.
Я пытаюсь переместить обработку запроса от одного обработчика к другому в зависимости от условия в первом обработчике. Кажется, что метод HttpContext.RemapHandler инициализирует экземпляр второго обработчика, но не вызывает метод HttpHandler.ProcessRequest; ответ пуст.
Делает ли метод HttpContext.RemapHandler то, что, на мой взгляд, должен - перенести обработку в новый HttpHandler и вызвать метод HttpHandler.ProcessRequest? Или я должен использовать другой подход, такой как другой метод или HttpModule?
РЕДАКТИРОВАТЬ: Оказывается, я должен использовать HTTPHandlerFactory. У меня есть решение, работающее хорошо сейчас.
Так для чего именно HttpContext.RemapHandler?
1 ответ
Ты можешь использовать HttpContext.RemapHandler
как вы указали, однако, если другой HttpHandler
звонки RemapHandler
(например, ASP.NET MVC, который регистрирует MvcHandler
в PostResolveRequestCache
) ваш IHttpModule
никогда не будет стрелять Может быть поэтому IHttpHandler.Process
никогда не звонил.
Если это ваша проблема, вы можете просто определить маршрут для игнорирования в MvcApplication.RegisterRoutes
как это:
routes.IgnoreRoute("your_path/{*pathInfo}");
Кроме того, помните, что с сервером веб-разработки Visual Studio и IIS6, RemapHandler
не будет работать.
Вот пример того, как выбрать правильный способ переназначения обработчика в зависимости от того, активирован ли Integrated Pipeline И все еще сможет получить доступ к сеансу:
public void Init(HttpApplication application)
{
if (HttpRuntime.UsingIntegratedPipeline)
// For IIS 7 and IIS 8
application.PostAuthorizeRequest += Application_PostAuthorizeRequest;
else
// For IIS 6
application.PostMapRequestHandler += Application_PostMapRequestHandler;
}
private void Application_PostAuthorizeRequest(object sender, EventArgs e)
{
((HttpApplication)sender).Context.RemapHandler(_myHandler);
}
private void Application_PostMapRequestHandler(object sender, EventArgs e)
{
((HttpApplication)sender).Context.Handler = _myHandler;
}
Разница между использованием HttpHandlerFactory
а также HttpModule
в этом случае, что последний позволяет вам решить, когда использовать какие IHttpHandler
независимо от ASP.NET IHttpHandler
отображения. Подробнее о MSDN: обработчики HTTP и обзор модулей HTTP.