IIS集成请求处理管道-修改请求
时间:2020-03-05 18:52:45 来源:igfitidea点击:
我想在IIS集成请求处理管道模式下运行的IIS7中使用HttpModule实现类似ISAPI筛选器的功能。
目的是在Web服务器级别查看传入的请求,并将一些自定义HttpHeaders注入到请求中。 `(例如:HTTP \ _EAUTH \ _ID)
在ASPX页面的页面生命周期的后期,我应该能够将该变量用作
string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();
因此,在Web服务器级别实现此模块,是否有可能更改ServerVariables集合?
解决方案
回答
我相信服务器变量列表仅包含从浏览器发送到服务器的标头。
回答
HttpRequest.ServerVariables属性是一个只读集合。因此,我们不能直接对其进行修改。我建议我们将自定义数据从http模块存储在httpcontext(或者全局应用程序对象或者数据库)中,然后在aspx页中读取该共享值。
如果我们仍然想修改服务器变量,那么在此线程中有一种使用反射的黑客技巧。
回答
我们将无法修改HttpRequest.Headers
或者HttpRequest.ServerVariables
集合。但是,我们可以将自己的信息添加到以下任何一项:
HttpContext.Current.Items HttpContext.Current.Response.Headers
不幸的是,Request.Params,Request.QueryString,Request.Cookies,Request.Form
(以及我们认为要填充的几乎所有其他地方都是只读的)。
如果我们打算将其安装到IIS 7中,我强烈建议我们不要使用反射。考虑到(可能)每个通过Web服务器的请求都需要调用此代码,因此它必须非常快反射并不能减少反射(除非用户很少)。
祝你好运!