gpt4 book ai didi

c# - 当服务器返回 401 响应时,请求的资源上不存在 'Access-Control-Allow-Origin' header

转载 作者:行者123 更新时间:2023-12-03 18:44:37 25 4
gpt4 key购买 nike

我有一个 .NET Core 3.0 和 Angular 8 Web 应用程序。我在 Startup.cs 中启用了 CORS,它工作正常。我在 Angular 端使用 JWT 身份验证和拦截器将 JWT token 附加到每个请求。当 token 有效时,调用具有 [Authorize] 属性的路由成功。当 token 过期/无效时,服务器按预期返回 401。但是, Angular 拦截器无法识别 401 错误,因为控制台错误中存在 CORS 问题:

Access to XMLHttpRequest at 'https://localhost:5001/api/Users/test' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.



在检查响应时,我可以看到响应中没有 Access-Control-Allow-Origin header 。为什么会这样?请注意,如果 token 有效,则不会发生这种情况。

Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthentication();

app.UseAuthorization();

app.UseCors(builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

Angular 接收错误状态为 status: 0, statusText: "Unknown Error"

最佳答案

UseCors 应该放在 UseAuthenticationUseAuthorization 之上:

app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());

app.UseAuthentication();
app.UseAuthorization();

否则,当授权中间件使管道短路时,CORS 中间件将不会运行,因此不会添加 CORS header 。随着 UseAuthorization 的引入,这在 ASP.NET Core 3.0 中有点不同,但中间件的顺序一直很重要。

关于c# - 当服务器返回 401 响应时,请求的资源上不存在 'Access-Control-Allow-Origin' header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58819634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com