凭据标志为“true”,但是“Access-Control-Allow-Credentials”

时间:2015-10-21 21:21:55

标签: c# asp.net angularjs asp.net-web-api

我正在尝试从AngularJS页面连接到ASP.NET Web-API Web服务,我得到以下内容

凭据标志为“true”,但“Access-Control-Allow-Credentials”标头为“”。允许凭据必须为“true”。因此,不允许原点“http://localhost:221”访问。

       var cors = new EnableCorsAttribute("http://localhost:221", "*","GET,PUT,POST,DELETE");
       config.EnableCors(cors);

使用此AngularJS

        $http({
        method: 'GET',
        url: 'http://localhost:1980/api/investors/62632',
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
        withCredentials: true
        //    withCredentials: true,
    }).then(function onUserComplete(response) {
        // this callback will be called asynchronously
        // when the response is available
    }, function onError(response) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.

在阅读了很多文章后,我将其添加到web.config

   <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://localhost:221" />
  </customHeaders>
</httpProtocol>

我收到此错误消息

'Access-Control-Allow-Origin'标头包含多个值localhost:221,localhost:221,但只允许一个。原因localhost:221因此不允许访问。

这真的没有任何意义,因为我已经添加了一次并且它没有找到它,但我将它添加到web.config并得到一个错误,说它已被多次添加。我看了很多文章,似乎找不到合适的答案。我正在使用Google Chrome。非常感谢你的帮助,因为我现在正在拔头发。

4 个答案:

答案 0 :(得分:23)

对谁,谁使用WebApiConfig.cs:

config.EnableCors(new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true }); 

答案 1 :(得分:10)

标题由代码添加两次,另一个由web.config添加。 CORS支持用于允许为CORS目的添加标头。配置自定义标头还会为任何请求添加响应标头,因此您可能希望删除配置设置。

var cors = new EnableCorsAttribute..

<customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://localhost:221" />
</customHeaders>

由于这两个区域都添加了两次相同的原点,因此您可以在标题上获得多个值。

使用参数withCredentials: true进行AJAX调用时,响应标头应具有Access-Control-Allow-Credentials = true。您需要使用SupportsCredentials = true通过代码为CORS属性添加该代码。否则你会收到错误  &#34;凭据标记为&#39; true&#39;,但“访问控制 - 允许 - 凭据”是&#39;&#39;&#34; < / p>

有关更多信息,请参阅withCredential参数和响应标题:

http://www.ozkary.com/2015/12/api-oauth-token-access-control-allow-credentials.html

希望它有所帮助。

答案 2 :(得分:2)

我在尝试使用angular2应用程序在.net核心上搜索webapi时遇到了这个问题。我必须在Startup.cs的Configure方法中将 AllowCredentials()添加到cors配置中,如下所示。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    app.UseCors(builder =>
        builder
        .AllowCredentials()
        .WithOrigins("http://localhost:3000"));
    ...
}

答案 3 :(得分:0)

尝试此处列出的预检请求方法:

enabling cross-origin resource sharing on IIS7

使用Chrome扩展程序Postman或Fiddler可以更轻松地调试CORS。我愿意打赌你要添加两次标题,但是没有你的整个代码,很难调试。 (哎呀,即使使用代码,CORS也很难调试。)

对我而言,您似乎不应该同时拥有web.config设置以及全局EnableCors()属性 - 这会导致双打。

您似乎没有在任何地方添加Access-Control-Allow-Credentials服务器端,但可能会由AllowCors属性添加,我不确定。 (我偏爱自己在OWIN处理CORS)