.NET Core 3 Web Api中如何解决Cors fetch导致的307临时重定向问题?

摘要:.NET Core 3 Web Api Cors fetch 一直 307 Temporary Redirect 继上一篇 ".net core 3 web api jwt 一直 401"
.NET Core 3 Web Api Cors fetch 一直 307 Temporary Redirect 继上一篇 .net core 3 web api jwt 一直 401 为添加JWT-BearerToken认证所述的坑后, 本次为添加CORS跨域,又踩坑了。 自从 .NET Core 2.2 之后,CORS跨域配置代码发生了很大变化。 在 .NET Core 3.1 中,本作者碰到各种HTTP错误,诸如 500、307、401 等错误代码... 在必应Bing和不断Debug调整配置代码位置后,得知: AllowAnyOrigin 方法,在新的 CORS 中间件已经被阻止使用允许任意 Origin,所以该方法无效。 AllowCredentials 方法,自从 .NET Core 2.2 之后,不允许和AllowAnyOrigin同时调用。 WithOrigins 方法,在 .NET Core 3.1 中有bug,具体原因未知,暂时只能用SetIsOriginAllowed(t=> true)代替,等效.AllowAnyOrigin方法。 创建项目默认的模板中,app.UseHttpsRedirection()在前面,所以我将app.UseCors()放在它后面,这是导致HTTP 307 Temporary Redirect福报的根本原因之一。 度娘告诉我,app.UseCors()方法要在app.UseAuthentication()之后,是误人子弟的,其实放在它前面也可以,并且app.UseCors()要在app.UseRouting()之后,app.UseEndpoints()和app.UseHttpsRedirection()之前 使用fetch跨域请求时,要注意controller的action是否有设置除了HttpOptions之外的其它Http Method方法,如果有要加上HttpOptions标记特性,因为fetch跨域请求会先执行OPTIONS预请求。 使用fetch请求需要JWT认证的接口时,除了在HTTP Headers设置Authorization之外,还需要设置'credentials': 'include'。 写app.UseXxxxxx方法,引入中间件时,要注意管道(Middleware)注册顺序。 参考: CORS配置:https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1 JWT认证:https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-3.1 Cors Issue: https://github.com/dotnet/aspnetcore/issues/16672 Forum: https://forums.asp.net/t/2160821.aspx?CORS+in+ASP+NET+Core+3+x 源代码 以下是在 .NET Core 3.1下经过严谨测试,可以JWT认证、CORS跨域、IIS托管、自寄主运行的源代码,仅供参考。
阅读全文