关于asp.net:IIS集成请求处理管道—修改请求

关于asp.net:IIS集成请求处理管道—修改请求

IIS Integrated Request Processing Pipeline — Modify Request

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

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

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

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

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


HttpRequest.ServerVariables属性是一个只读集合。因此,您不能直接对其进行修改。我建议您将自定义数据从http模块存储在httpcontext(或全局应用程序对象或数据库)中,然后在aspx页中读取该共享值。

如果您仍然想修改服务器变量,那么在此线程中有一种使用反射的黑客技巧。


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

1
2
HttpContext.Current.Items
HttpContext.Current.Response.Headers

不幸的是,Request.Params, Request.QueryString, Request.Cookies, Request.Form(以及您想到填充的几乎所有其他地方都是只读的。

如果您打算将其安装到IIS 7中,我强烈建议您不要使用反射。考虑到此代码(可能)需要通过网络服务器的每个请求,因此它必须非常快反射并不能减少反射(除非您的用户很少)。

祝好运!


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


推荐阅读