1

如http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive中所述,我创建了一个 SPA 并将 Azure AD 用于用户存储和 ADAL-JavaScript 库/与我的 Angular js 代码集成。它成功地完成了身份验证流程,但是当我调用使用 APIGEE 公开的第三方 API 时,我收到以下错误消息:

加载资源失败:服务器响应状态为 502 (Bad Gateway)

XMLHttpRequest 无法加载 http://webapiexposedusingapigee. 请求的资源上不存在“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>

对此的任何帮助表示赞赏。

谢谢。

4

1 回答 1

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;

}]);

于 2015-01-30T19:55:16.180 回答