我想在IIS集成请求处理管道模式下运行的IIS7中使用HttpModule实现类似ISAPI过滤器的功能。
目标是在Web服务器级别查看传入请求,并在请求中注入一些自定义HttpHeaders。 (for ex: HTTP\_EAUTH\_ID)
稍后在ASPX页面的页面生命周期中,我应该能够将该变量用作
string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();
因此,在Web Server级别实现此模块,是否可以更改ServerVariables集合?
答案 0 :(得分:3)
HttpRequest.ServerVariables属性是只读集合。所以,你不能直接修改它。我建议将自定义数据存储在httpsodule的httpcontext(或全局应用程序对象或数据库)中,然后在aspx页面中读取该共享值。
如果您仍想修改服务器变量,则使用Reflection会在此thread中提及一种黑客技术。
答案 1 :(得分:0)
我认为服务器变量列表只包含从浏览器发送到服务器的标头。
答案 2 :(得分:0)
您将无法修改HttpRequest.Headers
或HttpRequest.ServerVariables
集合。但是,您可以将您的信息发送到以下任何一个:
HttpContext.Current.Items
HttpContext.Current.Response.Headers
不幸的是,Request.Params, Request.QueryString, Request.Cookies, Request.Form
(几乎任何你认为填充它的地方都是只读的。
如果这是您计划安装到IIS 7中的HttpModule ,我强烈反对使用反射。鉴于这个代码将被(可能)每个通过Web服务器的请求调用,它需要非常快,反射只是不会削减它(除非你的用户很少)。
祝你好运!