ASP.NET Core 跨域請求(CORS)遇到的問題

問題一

報錯:
Access to XMLHttpRequest at 'http://api.test.com/xxx' from origin 'http://www.test.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

這是典型的跨越報錯,如果你是新手需要了解什么是跨域請參考 同源策略

解決方法:

1.打開 Startup.cs 文件,在頂部定義一個策略名稱 _myAllowSpecificOrigins ,策略名稱可以是任意名稱。

public class Startup
{
    readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
    //user code ……
}

2.在ConfigureServices方法中,配置CORS 策略,指定來源。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(name: MyAllowSpecificOrigins,
                          builder =>
                          {
                              builder.WithOrigins("http://www.test1.com",
                                                  "http://www.test2.com");
                              });
        });
        //user code ……
    }

3.在Configure方法中
調(diào)用 UseCors擴展方法并指定 _myAllowSpecificOrigins CORS 策略。
注意:UseCors添加 CORS 中間件時,必須將對的調(diào)用 UseCors 置于之后 UseRouting 但在之前 UseAuthorization 。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //user code ……
    app.UseRouting();//UseRouting之后

    app.UseCors(MyAllowSpecificOrigins);
        
    app.UseAuthorization();//UseAuthorization之前
    //user code ……
}

如果還是沒能解決問題,請瀏覽文章末尾的「參考」,微軟官方文檔里還有其它兩種方法可啟用 CORS


問題二:

報錯:
Access to XMLHttpRequest at 'http://api.test.com/xxx' from origin 'http://www.test.com' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

默認情況下,瀏覽器不會向應(yīng)用程序公開所有的響應(yīng)標(biāo)頭。
默認情況下可用的響應(yīng)標(biāo)頭包括:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

CORS 規(guī)范將這些標(biāo)頭稱為簡單的響應(yīng)標(biāo)頭。
若要使其他標(biāo)頭可用于應(yīng)用程序,需要在配置CORS 策略時添加指定響應(yīng)標(biāo)頭。

解決方法:

在上面「問題一」「步驟2 」ConfigureServices方法中,配置CORS 策略時,指定需要的響應(yīng)標(biāo)頭,比如報錯示例的Access-Control-Allow-Headers。

using Microsoft.Net.Http.Headers;//HeaderNames需引用命名空間

//user code ……

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(name: MyAllowSpecificOrigins,
                          builder =>
                          {
                              builder.WithOrigins("http://www.test.com")
                                     .WithHeaders(HeaderNames.ContentType, "Access-Control-Allow-Headers");//using Microsoft.Net.Http.Headers;
                              });
        });
        //user code ……
    }

若要允許所有請求響應(yīng)標(biāo)頭,請調(diào)用AllowAnyHeader方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(name: MyAllowSpecificOrigins,
                          builder =>
                          {
                              builder.WithOrigins("http://www.test.com")
                                     .AllowAnyHeader();
                              });
        });
        //user code ……
    }

-END-


參考:在 ASP.NET Core 中啟用跨域請求(CORS)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容