您可以使用HttpContext.RemapHandler
爲你指定的,但是如果另一HttpHandler
電話RemapHandler
(例如ASP.NET MVC這PostResolveRequestCache
註冊MvcHandler
)您IHttpModule
將永遠不會觸發。這也許是爲什麼IHttpHandler.Process
從未被調用。
如果這是你的問題,你可以簡單地定義路由在MvcApplication.RegisterRoutes
忽略這樣的:
routes.IgnoreRoute("your_path/{*pathInfo}");
另外請記住,使用Visual Studio的Web開發服務器和IIS6,RemapHandler
將無法正常工作。
這裏是被激活,並且仍然能夠訪問會話如何選擇重新映射基於與否綜合管線處理程序的正確方法的例子:
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 Handlers and HTTP Modules Overview。
明確的答案,尤其是有關mvc處理程序的部分!日Thnx! – 2013-01-25 12:10:12
如果應用了.NET 2.0 Service Pack 2,RemapHandler將在PostAuthorizeRequest中正常工作。 – 2014-09-11 18:44:33