从Web服务访问预配置的IIS响应标头

时间:2016-09-12 15:56:50

标签: asp.net iis asp.net-web-api

如何从Web API 2服务访问IIS配置的响应头?

在我的IIS配置中,有一个预先配置的响应标头Environment=DEV,我需要检查以确定要使用的环境设置。

当我通过HttpContext.Current.Response.Headers检查当前回复中的标题时,我只看到Server,而不是其他内容。

1 个答案:

答案 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.设置值如下

enter image description here

和保存。

这将添加相同的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获取响应头可能有一种方法,但由于答案开头提到的原因我不推荐它。

希望这有帮助。