IIS7:在经典模式下处理html文件的标头

时间:2015-11-11 11:40:34

标签: html iis-7 cors httpmodule isapi

我使用angular指令从我的IIS7经典模式服务器中提取html文件(由于SSO而需要经典)。为了满足CORS,我需要从请求中读取ORGIN并在html文件的响应中添加一个标头。这一点并不重要。我的问题是在我的代码中挂钩实际为静态HTML文件执行此操作。

因此,对于经典模式,我的处理程序/模块在system.web中定义,而不是system.webSever。因此,我无法使用runAllManagedModulesForAllRequests =" true"标志,它不是system.web模式的一部分。

在system.web中我有:

<httpHandlers>
    <!--<add path="*.html" verb="GET,HEAD" type="System.Web.StaticFileHandler" />-->
    <add path="*.html" verb="GET,HEAD" type="My.Namespace.CrossOriginHandler, My.DLL.Name" />
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler" />
</httpHandlers>

<httpModules>
    <add name="CrossOriginModule" type="My.Namespace.CrossOriginModule, My.Dll.name" />
  </httpModules>

这对MVC页面或webapi调用执行正常。它不会对我的静态HTML文件执行。

我开始担心我需要编写自定义ISAPI过滤器。有没有其他方法可以挂钩我的代码?在ISAPI过滤器和HttpModule之间缺少或挂钩的配置?

1 个答案:

答案 0 :(得分:1)

您有几个选项,绝对不需要为此编写ISAPI。

如果您可以盲目地为每个人设置一个选项,只需使用httpProtocol部分添加标题:

    <outboundRules> 
        <rule name="Set-Access-Control-Allow-Origin for known origins"> 
            <match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern=".+" negate="true" /> 
            <conditions> 
                <add input="{AllowedOrigins:{CAPTURED_ORIGIN}}" pattern=".+" /> 
            </conditions> 
            <action type="Rewrite" value="{C:0}" /> 
        </rule> 
    </outboundRules> 

然而,更好的选择是使用 URL重写来设置标题,并且仍然拥有检查原点的所有控件,并相应地重写它们。 我在这里写了一篇关于如何做到的快速文章: http://www.carlosag.net/articles/enable-cors-access-control-allow-origin.cshtml

在较高级别,这意味着添加URL重写入站规则以捕获Origin标头并将其设置在服务器变量中。然后,您可以稍后在出站规则中使用该服务器变量将其设置在标头中。我可以选择使用重写映射来调整您想要允许的原点。

{{1}}

请在此处查看完整说明:http://www.carlosag.net/articles/enable-cors-access-control-allow-origin.cshtml