我正在尝试从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。非常感谢你的帮助,因为我现在正在拔头发。
答案 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)