连接到 Web API 的 Angular/Breeze 应用程序在 IE11 上引发“拒绝访问”错误
Posted
技术标签:
【中文标题】连接到 Web API 的 Angular/Breeze 应用程序在 IE11 上引发“拒绝访问”错误【英文标题】:Angular/Breeze app connecting to Web API throws "Access Denied" error on IE11 【发布时间】:2014-10-15 15:49:21 【问题描述】:应用程序
简而言之,应用程序将数据从后端显示到网页上。客户端应用程序是使用 AngularJS 制作的单页应用程序。它调用位于不同域的 ASP.NET Web API 服务来检索数据。我在客户端应用程序和 Web 服务上都使用 BreezeJS 来管理这些数据。客户端托管在 SharePoint Online 网站上,服务托管在 IIS7 上。
错误
当 AngularJS 尝试针对此 Web 服务进行 XMLHttpRequest.open() 调用时,我遇到了“拒绝访问”错误。然而,虽然这似乎是一个简单的 CORS 问题,但它有一些让我难以理解的特点:
最重要的是,此错误仅在使用 Internet Explorer 11(或以前的版本)时发生。当在 Chrome 或 Firefox 中查看应用程序时,它可以连接并从服务中检索数据。
Web 服务配置为接受调用源。
本机 IE 开发工具或 Fiddler 均未检测到网络流量。
具体来说,angular.js 文件的xhr.open(method, url, true);
行会抛出此错误。
有没有人知道为什么会发生这个错误?
另外,如果需要更具体的细节,我当然可以提供。我什至不确定问题可能来自哪里,我不想转储大量不相关的代码行。
【问题讨论】:
【参考方案1】:我认为这是由于使用了“localHost”,即尝试从“Internet”区域中的源访问“本地 Intranet”区域中的资源时。
见:Access denied in IE 10 and 11 when ajax target is localhost
【讨论】:
【参考方案2】:这不仅仅是之前建议的本地主机问题。我有一个生产 AngularJS 应用程序,它试图 POST 到不同域上的公共 Web API 2。当网站被外部访问时,IE11、Chrome 和 Firefox 可以顺利运行。当从可以直接与这些服务器通信的子网访问时,我得到Access Denied
并且 IE 甚至不发送请求(Chrome 和 Firefox 工作完美,当然。一种解决方法(我拒绝称之为修复)是在 IE11 中将该站点添加为受信任站点。即使 Internet 的安全设置反映了受信任站点的设置,我也会被拒绝访问。我必须在每个内部 IE 系统上添加该站点才能获得访问权限。
【讨论】:
我们实际上让我们的 IT 部门推送了一个脚本,以将站点添加到所有内部机器上的受信任站点。以上是关于连接到 Web API 的 Angular/Breeze 应用程序在 IE11 上引发“拒绝访问”错误的主要内容,如果未能解决你的问题,请参考以下文章
Web API 在使用几天后总是无法连接到 MYSQL 数据库
使用 IOS、PHP、REST API、JSON 连接到数据库的 Web 服务
如何从 AngularJS 站点安全地连接到 web api