【问题标题】:Allow CORS for static content in MVC在 MVC 中允许 CORS 用于静态内容
【发布时间】:2023-03-04 23:38:01
【问题描述】:

我有一个在 www.domain.com(总是 www)上运行的 ASP.NET MVC 应用程序。我的静态域在 static.domain.com 上运行。

现在我在 Web.Config 中将 Access-Control-Allow-Origin 设置为“*”:

<add name="Access-Control-Allow-Origin" value="*"/>

但是,显然这不是好的做法。所以我尝试添加以下内容:

<add name="Access-Control-Allow-Origin" value="//static.domain.com"/>

允许任何协议(这是我理想中想要的,或者如果我可以添加两条规则,一条用于 http,一条用于 https)。这不起作用,所以我也尝试了 http:// 协议。

<add name="Access-Control-Allow-Origin" value="http://static.domain.com"/>

这也不起作用。

我在 stackoverflow 上阅读了类似的线程/问题,但我发现的所有内容都建议添加域,就像我在上一个示例“http://static.domain.com”中所做的那样...

我一定做错了什么,但我似乎无法理解那是什么。希望你能帮助我!

提前致谢!

迈克

【问题讨论】:

    标签: asp.net asp.net-mvc cors


    【解决方案1】:

    这个问题的答案类似于其他帖子的答案。仅通过 web.config 根本不可能。它需要在 Global.asax.cs 文件中以编程方式设置。

    这是通过在 Global.asax.cs 文件的 Application_EndRequest() 方法中添加几行代码来完成的。我将代码提取到一个方法中,但如果您愿意,可以直接将代码放入其中。

    string[] domains = {"static.domain.com", "domain.com"}; // Personally I get this from a config
    
    if (Request != null || Request.Headers != null || Response != null || Response.Headers != null)
    {    
      string host = Request.Headers["Host"]; // This doesn't care about protocol
    
      if (domains.Where(domain => domain == host).Count() > 0)
        Response.Headers.Add("Access-Control-Allow-Origin", "*");
      else
        Response.Headers.Remove("Access-Control-Allow-Origin");
    }
    

    这很好用,因为Request.Headers["Host"] 没有得到协议,我们可以检查是否与我们的字符串数组匹配,我们将 Access-Control-Allow-Origin 设置为允许一切,否则我们删除它。所以在某种程度上,我们正在动态设置密钥。

    这需要在 Global.asax.cs 中,因为它需要在每个请求中出现(因为我们也需要对所有资源文件使用它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2017-07-16
      • 2017-05-08
      • 2015-04-11
      • 2013-06-12
      • 1970-01-01
      相关资源
      最近更新 更多