我正在构建一个使用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。对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:8082'因此不允许访问。
但D2Service.get({ id: model.id })....
运行没有任何错误。为什么' PUT' “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
答案 0 :(得分:0)
要让预检请求生效,您应该在response
中添加以下标题:
Access-Control-Allow-Origin: YOUR_DOMAIN
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: YOUR_CUSTOM_HEADERS