【发布时间】:2011-10-19 17:20:01
【问题描述】:
这是场景:
我想为特定 URL 运行一个 HttpHandler,但这些 URL 没有一致的扩展名,因此我无法在 web.config 中使用 httpHandlers 映射处理程序。
相反,我有一个自定义 HttpModule,我在其中订阅 PostAuthenticateRequest,检查一些条件,如果当前 URL 符合条件,则使用 HttpContext.RemapHandler() 分配我的自定义处理程序。
这一切都很好,但是......
为了提高性能,我想仅在尚未分配处理程序的情况下进行 URL 检查和处理程序分配。我不会让你厌烦为什么我的处理程序只在没有分配其他处理程序时才适用,但情况总是如此。
这里真正的问题是,只能测试是否已经在 PostMapRequestHandler 上分配了处理程序,到那时,使用 RemapHandler() 为时已晚,因为会抛出 InvalidOperationException(请参阅http://msdn.microsoft.com/en-us/library/system.web.httpcontext.remaphandler.aspx)
我当时认为可能(但没有)是 HttpContext.Handler = x;而不是 HttpContext.RemapHandler(x);
以这种方式设置时,HttpContext.CurrentHandler 得到更新,一切看起来都很棒,但自定义处理程序的 ProcessRequest() 永远不会被调用。
提前感谢您的想法/cmets/洞察力。
【问题讨论】: