不允许使用 Angular 405 方法和“显示临时标题”错误
Posted
技术标签:
【中文标题】不允许使用 Angular 405 方法和“显示临时标题”错误【英文标题】:Angular 405 Method not allowed and "Provisional Headers are shown" error 【发布时间】: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 控制器、调用方法(有序)以及为什么方便地添加标头的详细信息。让我们知道您是在开发还是生产环境,因为它不同。如果这些是生产模式的结果,它们是否也存在于开发模式中?
【参考方案1】:
尝试添加 标头中的 API 密钥(例如:x-my-api-key) 标头中的 API 值(例如:7e807890-c777-466a-897)
希望这可以帮助...
【讨论】:
【参考方案2】:大约一个月前我遇到了同样的问题。
您需要为 Options 动词创建一个基本的 http ok 响应。把它放在你的基础 api 控制器中。首先发送选项请求,它需要一个 ok 响应回调才能继续将选项传递给 API
public HttpResponseMessage Options()
return new HttpResponseMessage StatusCode = HttpStatusCode.OK ;
【讨论】:
以上是关于不允许使用 Angular 405 方法和“显示临时标题”错误的主要内容,如果未能解决你的问题,请参考以下文章
Angular 7:发送 post 请求给出错误 405(不允许的方法)