Angular WithCredentials 不适用于 POST、PUT

问题描述 投票:0回答:4

我正在开发一个 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 相关。我一直无法弄清楚我错过了什么。

如果有任何指导,我将不胜感激。

.net angular cors httpclient
4个回答
4
投票

如果您在前端使用 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
        });

它应该可以工作。


1
投票

尝试以下代码。

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);

0
投票

我也遇到了类似的问题,即使我的 POST 请求上有

{withCredentials: true}

在我的 Spring Boot 服务器的代码中,它处理 CORS,我将

Access-Control-Allow-Origin
标头设置为
*
。我将
*
更改为
http://localhost:4200
,我的 Angular 应用程序就是从那里提供服务的。

此后一切顺利。希望这对某人有帮助。


0
投票

对于任何使用 Node.js 服务器的人来说,这对我来说是解决方案,使用 cors 包,您可以使用

npm i cors

安装它
const cors = require('cors');

app.use(cors({ 
  origin: 'http://localhost:4200', 
  credentials: true
})); 
© www.soinside.com 2019 - 2024. All rights reserved.