我正在开发一个 Angular 网站:
• 本地主机/测试上的 .Net Framework 服务器
• 本地主机上的客户端:4200
我的 cookie 身份验证工作正常,并且我的 GET 请求工作正常。
this.httpClient.get<Test>('dummyUrl', { withCredentials: true });
在服务器的 web.config 中,我有以下内容。
<add name="Access-Control-Allow-Credentials" value="true"/>
<add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
<add name="Access-Control-Allow-Methods" value="*" />
鉴于此设置,我希望同样适用于 PUT 和 POST 请求。
this.httpClient.put('dummyUrl', this.payload, { withCredentials: true });
我由此收到 401 未经授权。
我的调查
我看到的请求方法是 OPTIONS,它告诉我这在飞行前失败,并且这个问题与 CORS 而不是 Angular 相关。我一直无法弄清楚我错过了什么。
如果有任何指导,我将不胜感激。
如果您在前端使用 Angular 的 asp net core api,则在 Web api 中启动设置(在配置方法下),
进行以下设置
app.UseCors(options =>
{
options.SetIsOriginAllowed(origin => true);
//options.AllowAnyOrigin();
options.AllowAnyHeader();
options.AllowAnyMethod();
options.AllowCredentials(); <-- This one is important
});
它应该可以工作。
尝试以下代码。
import { RequestOptions, Headers } from '@angular/http';
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers, withCredentials: true });
this.httpClient.put('dummyUrl', this.payload, options);
我也遇到了类似的问题,即使我的 POST 请求上有
{withCredentials: true}
。
在我的 Spring Boot 服务器的代码中,它处理 CORS,我将
Access-Control-Allow-Origin
标头设置为 *
。我将 *
更改为 http://localhost:4200
,我的 Angular 应用程序就是从那里提供服务的。
此后一切顺利。希望这对某人有帮助。
对于任何使用 Node.js 服务器的人来说,这对我来说是解决方案,使用 cors 包,您可以使用
npm i cors
安装它
const cors = require('cors');
app.use(cors({
origin: 'http://localhost:4200',
credentials: true
}));