Azure Mobile Services调用API调用的控制台错误

时间:2015-08-12 23:49:17

标签: javascript angularjs azure azure-mobile-services

我正在将我的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标头错误

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第一个问题:您正在通过角度js代码执行跨域请求。因此,您必须在Azure移动服务设置中允许角度站点。转到您的移动服务信息中心>配置>应用设置>创建一个设置“MS_CrossDomainOrigins”,该值应为“http://[yoursitename]”。您可以允许多个站点,例如“http://[site1],http://[site2]”,但是您的ajax呼叫看起来不像是在调用移动服务,即使标签建议您询问移动服务。无论如何,您应该使用Chrome检查器之类的浏览器调试器并检查响应是否具有标题“Access-Control-Allow-Origin”。如果没有,您需要回到后端开发人员。 (微软记录的通过webapiconfig允许CORs的方式在我发布时对我不起作用,所以也许他也是这样做的。它只在我调试时才有效。)

第二个问题:我认为你真的需要先弄清楚CORs问题。一次一个。