【问题标题】:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed'Access-Control-Allow-Origin' 标头包含多个值 '*, *',但只允许一个
【发布时间】:2015-06-13 23:09:51
【问题描述】:

我正在使用 Angular 和 ASP.NET API。我面临的问题:当我在 API 代码中添加 CORS 时,它适用于 Internet Explorer,但不适用于 Chrome 和 Firefox。

这是错误:

XMLHttpRequest 无法加载 http://localhost:41028/api/values/abc。这 'Access-Control-Allow-Origin' 标头包含多个值 '*, *', 但只允许一个。因此,原点 'http://localhost:44796' 是 不允许访问。

这是我在web.config文件中添加的代码:

<system.webServer>
...
<httpProtocol>
  <customHeaders>
      <!-- Adding the following custom HttpHeader will help prevent CORS errors -->
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
...
</system.webServer>

在我添加的WebApiConfigFile.cs 文件中:

var CorsAttribute = new EnableCorsAttribute("* ","* ", "* ");
        config.EnableCors(CorsAttribute);

我是第一次使用 CORS。任何帮助将不胜感激。

【问题讨论】:

  • 在 web.config 中静态添加标头或使用 cors 属性动态添加标头。两者都不是。
  • 对不起,你能解释一下我说我是新来的……举个例子吗?我什至是关于堆栈溢出的新问题

标签: asp.net angularjs asp.net-web-api cors


【解决方案1】:

您设置了两次 CORS。我认为这就是问题所在。

请删除任何一项 CORS 设置。您可以将其从 web.configWebApiConfigFile.cs 中删除。

【讨论】:

    【解决方案2】:

    Chrome 和 Firefox 使用“OPTIONS”动词进行所谓的飞行前检查。

    因此,您必须将“OPTIONS”添加到 web.config 中允许的方法。您可能还必须向 Application_Begin 请求添加一些代码,就像这个答案建议的那样: Handling CORS Preflight requests to ASP.NET MVC actions

    以下是 CORS 的一些资源:

    IIS hijacks CORS Preflight OPTIONS request

    http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

    【讨论】:

      【解决方案3】:

      为 webAPI 提供的所有其他解决方案。此解决方案适用于您使用 webservice(.asmx) 作为 API 时

      Global.asax.cs 文件的begin_request 函数或web.config 中删除“Access-Control-Allow-Origin”详细信息。因为这个设置只能在一个地方

      【讨论】:

        【解决方案4】:

        我遇到了这个问题,因为我把app.UseCors 放在ConfigureOAuth 之后。换个顺序解决问题。

            public void Configuration(IAppBuilder app)
            {
                HttpConfiguration config = new HttpConfiguration();
        
                app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
                ConfigureOAuth(app);
        
                WebApiConfig.Register(config);
        
                // Used to put this line after ConfigureAuth(app), 
                // app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        
                app.UseWebApi(config);
            }
        

        这是我的案例的详细信息:

        • 一开始我在调用\token 时得到 Origin is not allowed in 'Access-Control-Allow-Origin'。
        • LSo 我添加了 customHeader,包括“Access-Control-Allow-Origin”、“Access-Control-Allow-headers”、“Access-Control-Allow-methods”。它修复了 \token 请求。
        • 但是在调用详细 api 时,我得到了重复的“Access-Control-Allow-Origin”。有很多建议,比如this 就是无法修复。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。在我输入确切的域而不是 * 之后(见下文),它对我有用。

          var CorsAttribute = new EnableCorsAttribute("https://www.mywebsite.com","", ""); config.EnableCors(CorsAttribute);

          【讨论】:

            猜你喜欢
            • 2021-06-21
            • 2015-03-02
            • 2019-10-02
            • 2019-11-05
            • 1970-01-01
            • 2018-10-28
            • 2016-10-02
            • 2020-02-04
            相关资源
            最近更新 更多