【问题标题】:Cors issue occurs only when "put"?Cors 问题仅在“放置”时出现?
【发布时间】: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


【解决方案1】:

要使预检请求生效,您的response 中应包含以下标头:

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

【讨论】:

  • 如何让ngResource调用有Access-Control-Allow-Origin的header?请求标头中缺少它。
  • 这应该是一个响应头,应该在你的服务器中设置
  • 现在我正在使用 nodejs 来托管 Angular 应用程序。我只是输入文件夹和npm start。我在项目中搜索了Access-Control-Allow-Origin,找到的唯一文件是文件夹bower_components\html5-boilerplate\dist下的.htaccess
  • 参考这篇文章如何在node.js中添加响应头http://stackoverflow.com/questions/18310394/no-access-control-allow-origin-node-apache-port-issue
  • 您在回答中说“响应”。你的意思是请求吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2020-02-19
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多