我正在将我的Angular App与Azure服务后端集成。
我最初只是使用标准的$ http调用:
$http({
method: 'POST',
url: "https://services.example.com/Api/myApi",
headers : {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "my-key"
},
data : post,
success : function(data,status) {
console.log(data + " " + status);
},
failure : function(err) {
console.log(err)
}
但这奇怪地返回了200响应,但是在请求的资源Error上出现了No'Access-Control-Allow-Origin'标头。后端开发人员向我保证CORS是开放的,所以在那里丢失了。
然后尝试与https://github.com/TerryMooreII/angular-azure-mobile-service集成。集成是有道理的,调用看起来像这样:
Azureservice.invokeApi('myApi', {
method: 'post',
body: {
data: 'Cheese'
},
headers : {
'Content-Type' : 'application/json'
}
})
.then(function(response) {
console.log('Here is my response object');
console.log(response)
}, function(err) {
//console.error('Azure Error: ' + err);
});
我得到了无意义的错误: 选项https://services.example.com/api/myApi MobileServices.Web-1.1.2.min.js:2
.DirectAjaxTransport.t.performRequest @ MobileServices.Web-1.1.2.min.js:2t.Platform.t.webRequest @ MobileServices.Web-1.1.2.min.js:2t.MobileServiceClient.MobileServiceClient._request @ MobileServices.Web-1.1.2.min.js:2(匿名函数)@ MobileServices.Web-1.1.2.min.js:2t.Platform.t.async @ MobileServices.Web-1.1.2.min.js :2Promise @ MobileServices.Web-1.1.2.min.js:2t.Platform.t.async @ MobileServices.Web-1.1.2.min.js:2invokeApi @ angular-azure-mobile-service.min.js:1 $ scope.submit @ form.js:30 $ a.functionCall @ angular.js:10567(匿名函数)@ angular.js:18627 $ get.h. $ eval @ angular.js:12412 $ get.h. $ apply @ angular.js:12510(匿名函数)@ angular.js:18626n.event.dispatch @jquery.js:4435n.event.add.r.handle @jquery.js:4121
再次使用404!
再次出现Access-Control-Allow-Origin标头错误有什么想法吗?
答案 0 :(得分:2)
第一个问题:您正在通过角度js代码执行跨域请求。因此,您必须在Azure移动服务设置中允许角度站点。转到您的移动服务信息中心>配置>应用设置>创建一个设置“MS_CrossDomainOrigins”,该值应为“http://[yoursitename]”。您可以允许多个站点,例如“http://[site1],http://[site2]”,但是您的ajax呼叫看起来不像是在调用移动服务,即使标签建议您询问移动服务。无论如何,您应该使用Chrome检查器之类的浏览器调试器并检查响应是否具有标题“Access-Control-Allow-Origin”。如果没有,您需要回到后端开发人员。 (微软记录的通过webapiconfig允许CORs的方式在我发布时对我不起作用,所以也许他也是这样做的。它只在我调试时才有效。)
第二个问题:我认为你真的需要先弄清楚CORs问题。一次一个。