只有在" put"?

时间:2016-11-28 00:26:35

标签: javascript asp.net angularjs http cors

我正在构建一个使用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

1 个答案:

答案 0 :(得分:0)

要让预检请求生效,您应该在response中添加以下标题:

Access-Control-Allow-Origin: YOUR_DOMAIN
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: YOUR_CUSTOM_HEADERS