【发布时间】:2020-12-17 10:47:35
【问题描述】:
我在 Angular 应用程序中将一些标头值传递给我的 API 调用:
httpOptions = {
headers: new HttpHeaders({
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"xibm-clientid": "Test"
})
};
submitSomething(myData: IMyData): Observable<any> {
return this.httpClient
.post<any>(apiURL, JSON.stringify(myData), this.httpOptions)
.pipe(catchError(this.errorHandler));
}
请求被重定向到我的后端 API (ASP.NET 3.1 Core API),我正在检查请求标头,如下所示:
string apicClientId = context.Request.Headers["xibm-clientid"].ToString();
context.Request.Headers 列表中不存在标头“xibm-clientid”。
注意:
我在自定义中间件而不是控制器级别检查此标头:
public class CheckHeadersMiddleware
{
private readonly RequestDelegate _next;
public CheckHeadersMiddleware(RequestDelegate next)
{
_next = next ?? throw new ArgumentNullException(nameof(next));
}
public async Task Invoke(HttpContext context)
{
string apicClientId = context.Request.Headers["xibm-clientid"].ToString();
}
}
当它碰到控制器时,我可以读取此标头,但我不想这样做,因为我想在调用控制器之前检查标头。那么为什么中间件层没有出现header呢?
我在这里缺少什么吗?
【问题讨论】:
-
确保在作用域上声明了 httpOptions。应该是 this.httpOptions = ...
标签: asp.net-web-api httpclient angular8 middleware asp.net-core-3.1