使用 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 服务给出错误的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs应用程序没有响应Wcf REST服务

WCF 服务 - 使用 json 调用客户端访问 rest 未提供正确的内容类型

当 BodyStyle = WebMessageBodyStyle.Wrapped 时从 C# 调用 Rest WCF 服务操作

Angular 4 两次调用 WCF REST

使用 jQuery/Ajax 从 JavaScript 调用 WCF/JSON/REST WebService

如何在 WCF 服务中调用 REST API?