您可以HttpContext.RemapHandler
按照您的指定使用,但是如果另一个HttpHandler
调用(例如注册在RemapHandler
ASP.NET MVC中),您将永远不会触发。这也许就是为什么从未被调用的原因。MvcHandler
PostResolveRequestCache
IHttpModule
IHttpHandler.Process
如果这是您的问题,您可以像这样简单地定义要忽略的路由MvcApplication.RegisterRoutes
:
routes.IgnoreRoute("your_path/{*pathInfo}");
另外,请记住,使用 Visual Studio Web 开发服务器和 IIS6RemapHandler
将无法正常工作。
下面是一个示例,说明如何根据 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.NETIHttpHandler
映射如何。有关 MSDN 的更多信息:HTTP 处理程序和 HTTP 模块概述。