在ASP.NET中,如何仅为TTF文件添加CORS标头?

时间:2012-07-24 06:40:10

标签: c# asp.net font-face cors

我有一个包含iframe的页面,显示外部页面。外部页面配置为从我的服务器下载CSS文件。

在CSS中,我添加了@font-face选择器:

@font-face {
    font-family: "Special Font";
    src: url("<%= Request.Url.GetLeftPart(UriPartial.Authority) + "/fonts/specialfont.ttf" %>");
}

这会在Chrome中下载并显示字体,但在Firefox中,它会下载字体,但拒绝使用它。进行一些研究表明,这个问题是一个跨领域的政策问题。这里提到的解决方案之一:

http://enable-cors.org/

是否启用CORS标头。但是,它提供的解决方案在整个网站范围内:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <httpProtocol>
                <customHeaders>
                    <add name="Access-Control-Allow-Origin" value="*" />
                </customHeaders>
            </httpProtocol>
        </system.webServer>
</configuration>

而我只想为.TTF个文件启用它。有没有办法通过使用HttpHandler或其他方法来做到这一点?

1 个答案:

答案 0 :(得分:10)

您可以使用web.config中的location element将配置规则限制为特定目录或文件,从而实现类似的功能。例如:

<configuration>
  <location path="fonts/specialfont.ttf">
    <system.webServer>
       <httpProtocol>
          <customHeaders>
             <add name="Access-Control-Allow-Origin" value="*" />
          </customHeaders>
       </httpProtocol>
    </system.webServer>
  </location>
</configuration>

虽然您可能希望为所有字体启用CORS,例如<location path="fonts">

this question的答案还有几个location的例子。