我正在使用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。任何帮助将不胜感激。
答案 0 :(得分:36)
您正在设置两次CORS。我认为这就是问题所在。
请删除任何一个CORS设置。您可以将其从web.config
或WebApiConfigFile.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。\token
请求。答案 4 :(得分:0)
我有同样的问题。在我输入了确切的域而不是*后(见下文),它对我有用。
var CorsAttribute = new EnableCorsAttribute(“ https://www.mywebsite.com”,“ ”,“ ”); config.EnableCors(CorsAttribute);