angular - 在 Angular 8.1.3 中将 HttpHeaders 添加到 http.get() 无法命中 API 端点
问题描述
我正在使用 Angular 8.1.3 对 RESTful API 端点执行 HTTP GET:
export class AnalysisService {
private analysisUrl = 'https://localhost:44367/api/analysis'; // URL to web api
httpOptions = {
headers: new HttpHeaders({ 'apiKey': 'xxxxx' })
};
constructor(
private http: HttpClient) { }
/** GET analysis by id. Will 404 if id not found */
getAnalysis(id: number): Observable<PresentedAnalysis> {
const url = `${this.analysisUrl}/${id}`;
console.log('url: ' + url);
return this.http.get<PresentedAnalysis>(url, this.httpOptions).pipe(
tap(_ => this.log(`fetched analysis id=${id}`)),
catchError(this.handleError<PresentedAnalysis>(`getAnalysis id=${id}`))
);
}
如果我从 http.get() 参数列表中删除 this.httpOptions ,此代码可以正常工作——它会在我的 API 端点上命中我的断点。但是,当我在 http.get() 调用中包含 this.httpOptions 时,我的断点没有命中,并且以下内容会记录到 Chrome 控制台:
我究竟做错了什么?
解决方案
正如@JoelJoseph 回答的那样,应该在服务器端处理 CORS 策略。此外,您的服务器预期的标头也可能会有所不同。大多数 API 端点接受 'Authorization' 标头以进行身份验证,其中标头值应以 'Bearer' 为前缀。如果服务器不允许某些标头(在您的情况下为“apiKey”),也可能会发生 CORS 错误。请验证 api 允许的标头。
推荐阅读
- python - 如何在python中导入excel选项卡并相应地在新列中给出选项卡的名称?
- php - 如何将 mobus 数据数组的数据类型转换为 REAL 数据类型
- javascript - 如何使用 testcafe 获取表格一列的文本,然后将其 eql 断言为“某物”
- socket.io - 保护聊天应用程序中的消息的最佳做法是什么?
- mysql - 替换正则表达式在 mysql 和 mariadb 中不起作用
- c# - 在 .net core 2.2 中初始化设置的正确方法?
- sql-server - 不匹配时 MSSQL 合并 THEN 从源插入 ID
- c++ - 使用 Qt 使 PC Lint Plus 更好地工作 - 使用哪些选项(或者甚至可能有 .lnt 文件)?
- node.js - nodejs imap 只读日历事件
- java - 如何在 JVM 中多次加载 java.util.TimeZone