使用 AngularJs 调用 WCF REST 服务给出错误
Posted
技术标签:
【中文标题】使用 AngularJs 调用 WCF REST 服务给出错误【英文标题】:Calling WCF REST service using AngularJs giving error 【发布时间】:2015-07-16 18:46:27 【问题描述】:我正在尝试使用 AngularJS 从我的本地计算机调用我的 WCF REST 服务(托管在非 PROD 环境中)。但每次我得到 p>
SEC7119:http://XXX/XXX/Web/rest/GeDetails 的 XMLHttpRequest 需要 CORS 预检。
和
SCRIPT7002:XMLHttpRequest:网络错误 0x80070005,访问被拒绝。
有什么方法可以使用 AngularJS 使用 WCF REST 服务?
谢谢!
【问题讨论】:
您似乎遇到了 CORS 问题,您无法从托管在其他服务器上的站点调用 Web 服务器。也许,如果您向我们展示请求和答案,我们可以帮助您了解请求中缺少哪些信息。 【参考方案1】:您遇到了 CORS 错误。
您必须在您的 api 中启用 CORS -> enabling-cross-origin-requests-in-web-api
对于 WCF 休息尝试 this
然后在你的 angular.config 中你必须:
angular.module('myapp',[...])
.config(function ($stateProvider, $urlRouterProvider, $httpProvider)
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
// ...
)
显然,在最新的 AngularJS 版本中,您无需添加任何内容即可使其成为 work。但实际上对我来说是这样工作的。
希望对你有帮助
【讨论】:
谢谢,但我在访问 WCF REST 服务时遇到问题,而不是使用 Web api。【参考方案2】:在我的服务 global.asax 页面中使用下面的代码,它的工作完美。
protected void Application_BeginRequest(object sender, EventArgs e)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
【讨论】:
以上是关于使用 AngularJs 调用 WCF REST 服务给出错误的主要内容,如果未能解决你的问题,请参考以下文章
WCF 服务 - 使用 json 调用客户端访问 rest 未提供正确的内容类型
当 BodyStyle = WebMessageBodyStyle.Wrapped 时从 C# 调用 Rest WCF 服务操作