【问题标题】:How to enable CORS in Asp.Net MVC5如何在 Asp.Net MVC5 中启用 CORS
【发布时间】:2019-12-09 23:00:23
【问题描述】:

我在本地运行 Angular 6,调用 MVC 控制器操作方法时出现 CROS 错误。

我尝试通过在我的 .net 应用程序的 web.config 文件中添加以下代码行来解决此问题。但仍然得到同样的错误。

<httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

我不想通过禁用网络安全来运行浏览器,我也不想创建一个类,因为我只需要在本地运行我需要启用 CORS。

有没有最简单的方法可以在 Web.config 或 Global.asax 文件中解决这个问题。

【问题讨论】:

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


    【解决方案1】:

    CORS 需要 3 个标头才能正常工作。

    记住 CORS 工作原理的重要资源是 The MDN Documentation。

    您包含的标头将允许所有来源发出请求。但没有指定允许他们提出哪些请求,因此,所有请求都被阻止。
    要允许所有来源发出特定请求,您需要包含 Access-Control-Allow-Methods 标头,它告诉浏览器 Web 服务器在该端点上允许哪些请求。

    根据您的请求的形成方式,您可能还需要包含 Access-Control-Allow-Headers 标头,它告诉浏览器允许将哪些标头发送到该端点上的 Web 服务器。

    Access-Control-Allow-Origin: *
    Access-Control-Allow-Methods: POST, GET, OPTIONS
    Access-Control-Allow-Headers: Content-Type
    Access-Control-Max-Age: 86400
    

    使用所有这些,您的 web.config 的正确配置将是:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <httpProtocol>
                <customHeaders>
                    <add name="Access-Control-Allow-Origin" value="*"/>
                    <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS"/>
                    <add name="Access-Control-Allow-Headers" value="Content-Type"/>
                </customHeaders>
            </httpProtocol>
        </system.webServer>
    </configuration>
    

    这将允许您使用 POST 或 GET 访问该端点。 出于性能原因,Access-Control-Max-Age 标头会告诉您的浏览器将这些结果缓存那么多秒。


    另外,请确保不要在您可能正在运行的任何生产系统中包含此配置。 最好为每个可能需要它的操作/控制器显式启用 CORS。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2018-09-28
      • 2021-12-30
      • 2017-05-03
      • 2020-09-07
      • 2020-09-02
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多