Pap*_*lon 93 cors asp.net-web-api angularjs-http
我在客户端使用AngularJS $ http访问服务器端ASP.NET Web API应用程序的端点.由于客户端作为服务器托管在不同的域上,因此我需要CORS.它适用于$ http.post(url,data).但是只要我通过$ http.get(url)对用户进行身份验证并发出请求,我就会收到消息
The 'Access-Control-Allow-Origin' header contains multiple values 'http://127.0.0.1:9000, http://127.0.0.1:9000', but only one is allowed. Origin 'http://127.0.0.1:9000' is therefore not allowed access.
Fiddler告诉我,在成功的选项请求之后,get请求中确实有两个头条目.我做错什么地方在哪里?
更新
当我使用jQuery $ .get而不是$ http.get时,会出现相同的错误消息.所以AngularJS似乎没有问题.但哪里错了?
Pap*_*lon 51
我补充道
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
以及
app.UseCors(CorsOptions.AllowAll);
在服务器上.这导致两个标题条目.只需使用后者即可.
Bra*_*ski 46
我们就遇到了这个问题,因为我们已经根据最佳实践建立CORS(如http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api)AND ALSO <add name="Access-Control-Allow-Origin" value="*"/>在web.config中有一个自定义标题.
删除web.config条目,一切都很好.
与@ mww的答案相反,我们仍然EnableCors()在WebApiConfig.cs和EnableCorsAttribute控制器上.当我们拿出一个或另一个时,我们遇到了其他问题.
小智 40
我正在使用Cors 5.1.0.0,经过多次头痛,我发现问题是从服务器复制Access-Control-Allow-Origin和Access-Control-Allow-Header头
config.EnableCors()从WebApiConfig.cs文件中删除,只需[EnableCors("*","*","*")]在Controller类上设置属性即可
查看此文章了解更多详细信息.
tfa*_*tfa 18
添加到注册 WebApiConfig
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
或 web.config
<httpProtocol>
<customHeaders>
<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" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
但不是两者
实际上你不能设置多个标题Access-Control-Allow-Origin(或者至少它不适用于所有浏览器).相反,您可以有条件地设置环境变量,然后在Header指令中使用它:
SetEnvIf Origin "^(https?://localhost|https://[a-z]+\.my\.base\.domain)$" ORIGIN_SUB_DOMAIN=$1
Header set Access-Control-Allow-Origin: "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
Run Code Online (Sandbox Code Playgroud)
因此,在此示例中,仅当请求标头Origin与RegExp匹配时才会添加响应标头:( ^(https?://localhost|https://[a-z]+\.my\.base\.domain)$它基本上表示通过HTTP或HTTPS的本地主机和基于HTTPS的*.my.base.domain).
记得启用setenvif模块.
文档:
BTW.在}e中%{ORIGIN_SUB_DOMAIN}e是不是一个错字.这是你在Header指令中使用环境变量的方式.
我既有OWIN也有我的WebAPI,两者显然都需要单独启用CORS,这反过来又会产生'Access-Control-Allow-Origin' header contains multiple values错误.
我最终删除了启用CORS的所有代码,然后将以下内容添加到system.webServer我的Web.Config节点:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="https://stethio.azurewebsites.net" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Authorization" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
为OWIN(允许登录)和WebAPI(允许API调用)执行此满足的CORS要求,但它创建了一个新问题:OPTIONS在我的API调用的预检期间找不到方法.解决这个问题很简单 - 我只需要从handlers我的Web.Config节点中删除以下内容:
<remove name="OPTIONSVerbHandler" />
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人.
Apache服务器:
我花了同样的钱,但那是因为我的文件中没有引号(")星号提供了对服务器的访问,例如'.htaccess.':
Header add Access-Control-Allow-Origin: *
Header add Access-Control-Allow-Origin "*"
Run Code Online (Sandbox Code Playgroud)
你也可能在另一个'.htaccess'文件夹中有一个'.htaccess'文件,例如
/
- .htaccess
- public_html / .htaccess (problem here)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,而不是'*'星号将是http://127.0.0.1:9000您提供服务数据的权限的ip()服务器.
ASP.NET:
检查代码中是否存在"Access-Control-Allow-Origin"副本.
开发者工具:
使用Chrome,您可以验证您的请求标头.按F12键并转到"网络"选项卡,现在运行AJAX请求并显示在列表中,单击并提供所有信息.

| 归档时间: |
|
| 查看次数: |
186759 次 |
| 最近记录: |