IIS集成请求处理管道 - 修改请求

时间:2008-09-13 16:30:27

标签: asp.net iis-7 httpmodule

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

如果您仍想修改服务器变量,则使用Reflection会在此thread中提及一种黑客技术。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

祝你好运!