【问题标题】:IIS Integrated Request Processing Pipeline -- Modify RequestIIS 集成请求处理管道——修改请求
【发布时间】:2008-09-13 16:30:26
【问题描述】:

我想在 IIS 集成请求处理管道模式下运行的 IIS7 中使用 HttpModule 实现类似 ISAPI 过滤器的功能。

目标是在 Web Server 级别查看传入的请求,并在请求中注入一些自定义的 HttpHeaders。 (for ex: HTTP\_EAUTH\_ID)

在 ASPX 页面的页面生命周期的后期,我应该能够将该变量用作

string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();

那么在 Web 服务器级别实现这个模块,是否可以改变 ServerVariables 集合?

【问题讨论】:

    标签: asp.net iis-7 httpmodule


    【解决方案1】:

    HttpRequest.ServerVariables 属性是只读集合。所以,你不能直接修改它。我建议将您的自定义数据从您的 httpmodule 存储在 httpcontext(或全局应用程序对象或您的数据库)中,然后在 aspx 页面中读取该共享值。

    如果你还想修改服务器变量,这里thread 中提到了一种使用反射的黑客技术。

    【讨论】:

      【解决方案2】:

      我相信服务器变量列表只包含从浏览器发送到服务器的标头。

      【讨论】:

        【解决方案3】:

        您将无法修改 HttpRequest.HeadersHttpRequest.ServerVariables 集合。但是,您可以将您的信息附加到以下任何一项:

        HttpContext.Current.Items
        HttpContext.Current.Response.Headers
        

        不幸的是,Request.Params, Request.QueryString, Request.Cookies, Request.Form(几乎任何其他你想填充它的地方都是只读的。

        如果这是您计划安装到 IIS 7 中的 HttpModule,我强烈建议您不要使用反射。鉴于(可能)通过网络服务器的每个请求都会调用此代码,因此它需要非常快,并且反射不会削减它(除非您的用户很少)。

        祝你好运!

        【讨论】:

          猜你喜欢
          • 2011-06-24
          • 1970-01-01
          • 2013-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          相关资源
          最近更新 更多