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

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

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

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

因此,在 Web 服务器级别实现此模块,是否可以更改 ServerVariables 集合?

有帮助吗?

解决方案

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

如果您仍然想修改服务器变量,这里提到了一种 hack 技术 线 使用反射。

其他提示

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

您将无法修改 HttpRequest.Headers 或者 HttpRequest.ServerVariables 收藏。但是,您可以将您的信息附加到以下任何一项:

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

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

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

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top