'Access-Control-Allow-Origin'标头包含多个值'*,*',但只允许一个

时间:2015-04-08 19:47:25

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

我正在使用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。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:3)

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

因此,您必须在web.config中的允许方法中添加“OPTIONS”。您还可能需要向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

答案 2 :(得分:2)

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

从Global.asax.cs文件begin_request函数或web.config中删除“访问控制允许来源”详细信息。因为此设置只能在一个地方

答案 3 :(得分:0)

我遇到了这个问题,因为我将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时,我在“Access-Control-Allow-Origin”中不允许使用Origin。
  • LSo我添加了customHeader,包括'Access-Control-Allow-Origin','Access-Control-Allow-headers','Access-Control-Allow-methods'。它修复了\token请求。
  • 但是当我调用detail api时,我得到了重复的'Access-Control-Allow-Origin'。有很多建议,例如this无法修复。

答案 4 :(得分:0)

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

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