【发布时间】:2017-10-29 08:28:41
【问题描述】:
在服务中,我调用 Web API(2)(托管在与前端 Angular 4 应用程序不同的服务器上)操作方法以检索一些信息。
操作方法需要授权,我正在使用登录应用程序后收到的访问令牌进行授权。现在,代码在 Microsoft Edge 中运行良好,但是在 chrome 中给了我预检错误,我猜这是 CORS 问题。不知道如何解决这个问题。有人可以帮我解决这个问题吗?
这是我的代码;
getCompanyInfo(id: string) {
let headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Authorization': 'Bearer ' + this.commonService.accessToken
});
let options = new RequestOptions({ headers: headers });
let getRequestUrl = this.commonService.baseUrl + 'api/getCompanyInfo';
return this.http.get(getRequestUrl + '/' + id, options)
.map((res: any) => <CompanyInfoModel>res.json())
.do(response => console.log(response))
.catch(this.commonService.handleError);
}
请注意,这很好用;
如果我不使用对 Web API 的授权访问并从标头中删除令牌。
在 Microsoft Edge 中,标头中有或没有访问令牌。
【问题讨论】:
-
我假设
this.http.get会在必要时自行处理 OPTIONS 请求?您是否检查过 Chrome 开发工具是否确实发生了这种情况? -
@CBroe 感谢您的回复,我收到了 chrome 开发工具 - 无法加载 localhost:80/api/getCompanyInfo/1:预检响应包含无效的 HTTP 状态代码 404
-
您在网络面板中看到实际的预检请求(OPTIONS 方法)吗?
-
您是否也可以访问此请求的另一端,即请求的服务器端?如果是这样,请检查那里的访问和错误日志。这可能是找出问题所在的更快方法。
-
@CBroe 是的,我确实可以访问服务器端。我可以在提琴手和网络面板中看到相同的 404 错误。