我正在开发一个使用第三方SOAP Web服务的Angular Web应用程序。
我正在使用Angualr-soap进行SOAP调用。
Angularjs服务代码:
var app = angular.module('app', ['angularSoap']);
app.config([
'$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
app.factory("CallSOAPService", ['$soap', function ($soap) {
var baseListUrl = "http://***.***.***.***/WebBooking/ListingServices.asmx";
return {
getCityList: function () {
return $soap.post(baseListUrl, "GetCityList");
}
}
}]);
app.controller('MainCtrl', ['$scope', 'CallSOAPService',
function ($scope, CallSOAPService) {
CallSOAPService.getCityList().then(function (response) {
console.log(response);
}, function() {
console.log("Something went wrong!");
});
}]);
它给了我以下错误:
XMLHttpRequest无法加载 HTTP:// /WebBooking/ListingServices.asmx?wsdl。没有 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,不允许原点'null'访问。
我通过在Chrome中安装Allow-Control-Allow-Origin:*
扩展程序尝试了同样的调用,但它运行正常。
我知道此Chrome扩展程序允许从任何来源请求任何包含ajax的网站,添加到回复Allow-Control-Allow-Origin: *
标题
我在ASP.NET Web Forms应用程序中尝试了这个相同的URL,它没有给我这个CORS问题。
有没有其他方式调用此方法而不会遇到此CORS问题而不是从服务器处理它?</ p>
答案 0 :(得分:0)
简而言之,没有办法全面实现这一目标。有些客户端不会检查CORS标头,但对于那些用户,您必须在服务器端修复它。如果有一种方法可以在客户端进行,那么它将破坏CORS的整个目的
答案 1 :(得分:0)
在阅读了一些文章和少数R&amp; D步骤后,找到了解决方案。这有两种可能性。
作为最佳选择我们可以启用CORS表单服务端。为此,我们可以按照以下步骤进行操作。
打开Internet信息服务(IIS)管理器
右键单击要启用CORS的站点,然后转到 属性
更改为“HTTP标头”标签
在“自定义HTTP标头”部分中,单击“添加”
输入Access-Control-Allow-Origin作为标题名称
输入*作为标题值
单击“确定”两次
如果我们无法控制服务器,我们可以通过模拟服务实现它。这个模拟服务仅用于调用我们无法控制的服务。
希望这会对你有所帮助。
答案 2 :(得分:-1)
在配置块中,您可以使用: - $ httpProvider.defaults.useXDomain = true; 删除$ httpProvider.defaults.headers.common ['X-Requested-With'];
但是,它还需要从服务器配置才能工作