【问题标题】:Is CORS issue unique to AngularJS applications?CORS 问题是 AngularJS 应用程序独有的吗?
【发布时间】:2016-10-09 22:10:30
【问题描述】:

我正在使用 AngularJS 构建一个客户端应用程序,该应用程序向使用 ASP.NET 构建的 RESTful Web API 发出请求。我遇到了“没有 Access-Control-Allow-Origin Header is Present”错误,我知道为了修复它,您需要在您的 Web API 中允许 CORS,我已经这样做了。

然而,我不明白为什么我只在 AngularJS 应用程序中遇到这个问题。我在 ASP.NET MVC 中构建了许多客户端应用程序,它们使用来自 ASP.NET Web API 的服务,但我从未遇到过这个问题。有人能解释一下为什么会这样吗?

【问题讨论】:

  • CORS 问题与 Angular 无关。尝试使用纯 jQuery 对禁用 CORS 的 API 进行 ajax 调用,您将收到该错误。
  • 这不是唯一的。当您从不同域获取数据时,此安全性将启动并阻止请求。您是否在与 web api 相同的域上运行 angularjs 应用程序?
  • 它们都运行在不同的本地主机地址上。
  • 是它不工作的问题吗?还是你让它工作了?
  • 我确实让它工作了,但不是以我想要的方式。我必须添加 [EnableCors(" * ", " * "," * ")] ,它允许来自所有来源的请求到我的控制器类,而不是 [EnableCors("localhost:48340", " * "," * ")]因为它不起作用。

标签: angularjs asp.net-web-api cors


【解决方案1】:

AngularJS 并不是唯一的。对于所有转到与其所在域不同的域的 javascript 调用都是这样的。

不同之处可能在于您从 MVC 项目的服务器调用了 Web 服务。

虽然从前端(浏览器)调用 API,但浏览器具有内置的安全性,不允许您调用不同的域。服务器没有与浏览器相同的内置安全性。

【讨论】:

  • 确实如此,但 Angular 对此增加了一些限制:除了 AngularJS 中的 GET 之外,您不能在其他方法上使用 json。我不清楚这些限制,我找不到有据可查的链接。我在 SO 上看到了 soe 问题,表明有些人必须将标头更改为 FROM 而不是 json 才能获得 angularJS 允许的请求。还有一些关于 json/jsonp 的东西,但我仍然没有找到一个真正合适的链接。
  • 我从来没有真正遇到过这个问题。一定是某种边缘情况。
  • 但我在同一个 Visual Studio 解决方案上都有这两个应用程序。运行应用程序时不应该使用同一台服务器吗?
  • 什么意思?您尝试调用的 Angular 代码和 Web api 在同一个 Web 项目中?
  • 谢谢,从现在开始我不会忘记这件事!
【解决方案2】:

CORS 是一种基于浏览器的技术,不仅限于 Angular。 Angular 利用 XMLHttpRequest 发出请求,它使用同源策略。您的其他客户端应用程序正常工作的原因是它们不是基于浏览器的。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

【讨论】:

    【解决方案3】:

    没有。它不是 Angular 独有的。

    当您的后端 API 和前端 SPA 具有以下不同之一时,您将遇到 CORS 问题:

    • 主机名:api.example.comwww.example.com
    • 端口:example.comexample.com:8080
    • 协议:https://example.comhttp://example.com

    【讨论】:

    • 所以,基本上,因为 ASP.NET MVC 不是 SPA 并且在服务器上运行,这就是为什么我在 ASP.NET MVC 应用程序调用 Web API 时没有 CORS 问题的原因?
    • 是的,您可以通过从您的 ASP.NET 应用程序托管您的 SPA 或在子域中托管 API 或将一个反向代理到其他路径来解决 CORS 问题 - 或者只是设置在您的 WebAPI 中添加 CORS 标头。
    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 2016-03-29
    • 2015-12-01
    • 2016-09-17
    • 1970-01-01
    • 2016-08-15
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多