如何从Web API 2服务访问IIS配置的响应头?
在我的IIS配置中,有一个预先配置的响应标头Environment=DEV
,我需要检查以确定要使用的环境设置。
当我通过HttpContext.Current.Response.Headers
检查当前回复中的标题时,我只看到Server
,而不是其他内容。
答案 0 :(得分:1)
我认为您不应该依赖响应标头,因为它们在管道的后期阶段被IIS添加到响应中,并且控件已经不在WEB API中。
如果必须这样做,可以使用URL Rewrite + Server Variables。安装URL重写并在system.webServer下的web.config中添加规则,如下所示
<rewrite>
<rules>
<rule name="GetEnvironmentInfo">
<match url=".*" />
<serverVariables>
<set name="Environment" value="Dev" />
</serverVariables>
<action type="Rewrite" url="{R:0}" />
</rule>
</rules>
</rewrite>
您也可以从IIS UI添加此规则。现在,根据webAPI配置,您可以使用以下代码
获取服务器变量string output = string.Empty;
if (Request.Properties.ContainsKey("MS_HttpContext"))
{
output = ((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.ServerVariables["Environment"];
}
else if (Request.Properties.ContainsKey("MS_OwinContext"))
{
var httpContextWrapper = ((OwinContext)Request.Properties["MS_OwinContext"]).Environment["System.Web.HttpContextBase"] as HttpContextWrapper;
output = httpContextWrapper.Request.ServerVariables["Environment"];
}
上述XML可以从服务器级别的IIS GUI生成
1.安装URL重写。
2.打开IIS Manger(Windows Run - &gt; Inetmgr)
3.在左侧菜单中选择服务器
4.在中央窗格中,双击URL Rewrite。在右侧的“操作”窗格中,单击“添加规则”
5.设置值如下
和保存。
这将添加相同的XML,但现在在服务器级别,即在C:\ Windows \ System32 \ inetsrv \ Config \ applicationHost.config文件中
<globalRules>
<rule name="GetEnInfo">
<match url=".*" />
<action type="Rewrite" url="{R:0}" />
<serverVariables>
<set name="Environment" value="dev" />
</serverVariables>
</rule>
</globalRules>
关于从IIS获取响应头可能有一种方法,但由于答案开头提到的原因我不推荐它。
希望这有帮助。