0

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

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

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

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

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

4

3 回答 3

3

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

如果您仍想修改服务器变量,此线程中提到了一种使用反射的 hack 技术。

于 2008-09-13T17:52:30.547 回答
0

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

于 2008-09-13T17:07:38.093 回答
0

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

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

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

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

祝你好运!

于 2008-09-14T09:25:41.783 回答