【发布时间】:2017-04-11 15:46:56
【问题描述】:
我正在构建一个使用 ng-resource 的 Angular 应用程序。服务 API 内置在 Asp.Net Core web api 中,并且已经启用了 CORS。
service.js 代码
.factory('D2Service', ['$resource', function ($resource) {
return $resource('http://localHost:5001/api/D2/:id',
{ id: '@id' },
{
update: { method: 'PUT' }
});
}])
但是,控制器中的调用D2Service.update(model.d); 出现以下错误。
XMLHttpRequest 无法加载 http://localhost:5001/api/D2。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8082' 因此不允许访问。
但是D2Service.get({ id: model.id }).... 运行时没有任何错误。为什么 'PUT' 有 CORS 问题,而 'GET' 没问题?
以下是使用 fiddler 监控时的请求/响应。
请求:
OPTIONS http://localhost:5001/api/D2 HTTP/1.1
Host: localhost:5001
Connection: keep-alive
Access-Control-Request-Method: PUT
Origin: http://localhost:8082
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:8082/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
回复:
HTTP/1.1 204 No Content
Date: Sun, 27 Nov 2016 23:32:31 GMT
Server: Kestrel
【问题讨论】:
-
要正确支持 CORS,您的服务器需要响应预检请求 (OPTIONS) - 这就是 CORS 的工作原理
-
如何让服务器响应预检请求?我在 dotnet core 上使用 Asp.net core。
-
这就是谷歌的目的——搜索如何做这些事情——docs.microsoft.com/en-us/aspnet/core/security/cors
-
我已经添加了
services.AddCors();和 app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader())` 但它仍然无法正常工作。 -
根据有关预检的文档部分,我看不到“options.addPolicy”
标签: javascript asp.net angularjs http cors