【发布时间】:2020-11-18 10:44:18
【问题描述】:
这让我发疯了。我正在尝试向我的 api 服务器发送一个简单的请求并附加标头。它首先给我这个临时标头显示消息,然后它将在下一个请求时失败
Provisional headers are shown
Accept: application/json, text/plain, */*
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
Referer: https://mywebsite.com/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
如果我在拦截方法中添加以下数据,则会出现错误。
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({ headers: request.headers.set('Access-Control-Allow-Credentials', 'true') });
request = request.clone({ headers: request.headers.set('Cache-Control', 'no-cache') });
request = request.clone({ headers: request.headers.set('Pragma', 'no-cache') });
request = request.clone({ headers: request.headers.set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT') });
return next.handle(request);
}
如果我删除它并且不添加标头,那么我不会收到错误,但最终我需要在标头中发送其他数据,例如 authtoken 和用户 ID。 为什么我在附加到标头时收到此 405 错误?
【问题讨论】:
-
相关帖子here
-
您需要阅读 CORS (developer.mozilla.org/en-US/docs/Web/HTTP/CORS) 以了解问题,然后在服务器端实施。此外
Access-Control-Allow-Credential是服务器端标头,添加它在客户端会导致更多问题 -
预检请求始终是
OPTIONS,并且不使用与实际请求相同的方法。请添加一些有关 api 控制器、调用方法(有序)以及为什么方便地添加标头的详细信息。让我们知道您是在开发还是生产环境,因为它不同。如果这些是生产模式的结果,它们是否也存在于开发模式中?
标签: c# angular asp.net-web-api cors