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服务器的请求都需要调用此代码,因此它必须非常快反射并不能减少反射(除非用户很少)。

祝你好运!