我创建了一个SPA并使用了Azure AD for User store和ADAL-JavaScript库,如http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/所述,以便与我的angular js代码集成。它成功完成了身份验证流程,但是当我调用使用APIGEE公开的第三方API时,我收到了以下错误消息:
无法加载资源:服务器响应状态为502(网关不良)
XMLHttpRequest无法加载http:// webapiexposedusingapigee。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://mywebsite.in'因此不允许访问。响应具有HTTP状态代码502.
当我检查Fiddler时,我得到了以下故障字符串。 " faultstring =收到405响应没有允许标题"
并警告:
阻止跨源请求:同源策略禁止在http:// test.apigee.net/v1/selectop/myapi上读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。
我在APIGEE上添加了以下标题:
<Header name="Access-Control-Allow-Origin">*</Header>
<Header name="Access-Control-Allow-Credentials">true</Header>
<Header name="Access-Control-Allow-Headers">Origin, X-Requested-With, Content-Type, Accept</Header>
<Header name="Access-Control-Max-Age">3628800</Header>
<Header name="Access-Control-Allow-Methods">GET, PUT, POST, DELETE, OPTION</Header>
对此有任何帮助表示赞赏。
感谢。
答案 0 :(得分:0)
如果您在WebAPI端点上设置了正确的CORS,它将接受该请求。我不熟悉APIGEE,但此链接列出了启用的步骤:http://apigee.com/docs/api-services/content/adding-cors-support-api-proxy。
您需要指定使用xdomain在angular js中发送标头:
app.factory('contactService', ['$http', function ($http) {
var serviceFactory = {};
var _getItems = function () {
$http.defaults.useXDomain = true;
delete $http.defaults.headers.common['X-Requested-With'];
return $http.get('http://adaljscors.azurewebsites.net/api/contacts');
};
serviceFactory.getItems = _getItems;
return serviceFactory;
}]);