the*_*rrs 1 c# httphandler remap
MSDN文档说:
HttpContext.RemapHandler方法 - 允许您为请求指定处理程序.
我试图将请求的处理从一个处理程序移动到另一个处理程序,具体取决于第一个处理程序中的条件.HttpContext.RemapHandler方法似乎初始化第二个处理程序的实例但不调用HttpHandler.ProcessRequest方法; 回复是空的.
HttpContext.RemapHandler方法是否按照我的想法执行 - 将处理转移到新的HttpHandler并调用HttpHandler.ProcessRequest方法?或者我应该使用其他方法,如另一种方法或HttpModule?
编辑:结果我应该使用HTTPHandlerFactory.我现在的解决方案很好用.
那么究竟什么是HttpContext.RemapHandler?
你可以使用HttpContext.RemapHandler你指定的,但是如果另一HttpHandler电话RemapHandler(其中注册如ASP.NET MVC MvcHandler中PostResolveRequestCache)你IHttpModule将永远不会触发.这也许就是为什么IHttpHandler.Process从未被召唤过
如果这是您的问题,您可以MvcApplication.RegisterRoutes像这样简单地定义要忽略的路由:
routes.IgnoreRoute("your_path/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
另外,请记住,使用Visual Studio Web Development Server和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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用a HttpHandlerFactory和之间的区别在于HttpModule后者允许您决定何时使用哪个IHttpHandler而不管ASP.NET IHttpHandler映射.有关MSDN的更多信息:HTTP处理程序和HTTP模块概述.