连接到 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 上引发“拒绝访问”错误的主要内容,如果未能解决你的问题,请参考以下文章

远程连接到 .net core 自托管 web api

Web API 在使用几天后总是无法连接到 MYSQL 数据库

使用 IOS、PHP、REST API、JSON 连接到数据库的 Web 服务

如何从 AngularJS 站点安全地连接到 web api

使用身份验证将 Web API 作为数据源连接到 power bi

.NET 客户端连接到 ssl Web API