'Access-Control-Allow-Origin' header 包含多个值

23 浏览
0 Comments

'Access-Control-Allow-Origin' header 包含多个值

我在客户端使用AngularJS的$http来访问服务器端的ASP.NET Web API应用程序的一个端点。由于客户端和服务器端在不同的域上,所以我需要CORS。对于$http.post(url, data)方法,它是工作正常的。但是,一旦我对用户进行身份验证并通过$http.get(url)方法发送请求,我就会收到以下消息:\n

\n\'Access-Control-Allow-Origin\'头包含多个值\'http://127.0.0.1:9000, http://127.0.0.1:9000\',但只允许一个值。因此,源\'http://127.0.0.1:9000\'无法访问。\n

\nFiddler向我显示,在成功的options请求之后,get请求中确实有两个头部条目。我在哪里做错了? \n更新\n当我使用jQuery的$.get方法代替$http.get时,出现了相同的错误消息。所以这似乎不是AngularJS的问题。但是我在哪里出错了呢?

0
0 Comments

问题出现的原因是服务器返回了重复的Access-Control-Allow-Origin和Access-Control-Allow-Header头部信息。解决方法是从WebApiConfig.cs文件中移除config.EnableCors()代码,并且在Controller类上设置[EnableCors("*","*","*")]属性。确保在web.config文件中没有设置类似<add name="Access-Control-Allow-Origin" value="*" />的配置项。

使用Cors 5.1.0.0版本时,我遇到了许多问题,经过一番苦苦挣扎,发现问题出在服务器返回了重复的Access-Control-Allow-Origin和Access-Control-Allow-Header头部信息。为了解决这个问题,我在WebApiConfig.cs文件中移除了config.EnableCors()代码,并且在Controller类上设置了[EnableCors("*","*","*")]属性。这样做之后,问题得到了解决。

如果你也遇到了类似的问题,我建议你查看这篇文章(链接:http://msdn.microsoft.com/en-us/magazine/dn532203.aspx),其中有更详细的信息。

对我来说,这种解决方法非常有效。只需确保在web.config文件中没有设置类似<add name="Access-Control-Allow-Origin" value="*" />的配置项即可。这样做之后,问题就解决了。

0
0 Comments

问题的原因是在服务器上添加了两个头部条目,解决方法是只使用后面一个头部条目。

这个问题的出现是因为在服务器上添加了两个头部条目。在代码中,首先使用了config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "*", "*")),然后又使用了app.UseCors(CorsOptions.AllowAll),导致了两个头部条目的出现。解决方法是只使用后面一个头部条目,即app.UseCors(CorsOptions.AllowAll)

根据代码中的提示信息,可以推测Properties.Settings.Default.Cors是从一个设置文件中读取的。下面的代码给出了一个示例:

Properties.Settings.Default.Cors = "http://example.com";

另外,UseCors是在Microsoft.Owin.Cors NuGet包中定义的一个扩展方法。可以在katanaproject.codeplex.com/SourceControl/latest#src/…中查看相关代码。

config.EnableCors(enableCorsAttribute)通常在WebApiConfig.cs中调用,这是Microsoft.AspNet.WebApi.Cors NuGet包的一部分。可以在asp.net/web-api/overview/security/…中找到有关使用该包的描述。

app.UseCors(CorsOptions.AllowAll)通常在Startup.Auth.cs中调用,作为配置身份提供者(例如OAuth)的一部分,它也是Microsoft.Owin.Cors NuGet包的一部分。

需要注意的是,在IAppBuilder app中使用CorsExtensions.UseCors(app, CorsOptions.AllowAll)

在解决问题时,如果只需要对整个站点的所有调用进行CORS处理,可以在OWINStartup配置中删除app.UseCors

0
0 Comments

问题的出现原因是因为在web.config中设置了自定义的头部<add name="Access-Control-Allow-Origin" value="*"/>,同时又按照最佳实践设置了CORS。解决方法是移除web.config中的自定义头部设置。

以下是其他人提供的一些解决方法:

- 删除web.config中的<add name="Access-Control-Allow-Origin" value="*"/>,保留其他两个头部设置<add name="Access-Control-Allow-Headers" value="Content-Type" /><add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

- 只能启用一次CORS,所以需要移除web.config中的设置,只使用app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);方法

- 确保只启用一次CORS,否则会出现问题

以上是一些解决方法,希望能帮助解决这个问题。

0