自從 .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)注冊順序。
參考鏈接:https://www.cnblogs.com/VAllen/p/dotnet-core-3-cors-fetch-response-307-temporary-redirect.html