2

使用 Microsoft.Web.Infrastructure 程序集,我们可以在预应用程序启动阶段注册模块,如下所示:

DynamicModuleUtility.RegisterModule(typeof(MyHttpModule));

是否可以PageHandlerFactory在代码中注册 ASP.NET Web 表单中的自定义,而不是像上面使用模块的示例一样?

我目前通过这样的代码连接它,但我发现它太冗长(而且它使得创建快速启动 NuGet 包变得更加困难,因为我必须更改 web.config):

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="CustomFactory" verb="*" path="*.aspx"
        type="Shared.CustomPageHandlerFactory, Shared"/>
    </handlers>
  </system.webServer>
</configuration>
4

1 回答 1

1

据我所知,没有办法在代码中做到这一点。然而,在我的特殊情况下,解决方案实际上是注册一个 HTTP 模块。

HTTP 模块可以在初始化时挂钩到HttpApplication.PreRequestHandlerExecute事件,该事件在页面处理程序工厂创建页面之后但在 ASP.NET 开始执行该页面(和其他处理程序)之前执行。

这是这样一个 HTTP 模块的示例:

public class MyHttpModule : IHttpModule
{
    void IHttpModule.Dispose() {
    }

    void IHttpModule.Init(HttpApplication context) {
        context.PreRequestHandlerExecute += 
            this.PreRequestHandlerExecute;
    }

    private void PreRequestHandlerExecute(object s, EventArgs e) {
        IHttpHandler handler = 
            this.application.Context.CurrentHandler;

        // CurrentHandler can be null
        if (handler != null) {
            // TODO: Initialization here.
        }            
    }
}
于 2013-03-26T09:28:34.300 回答