Cors 跨來源資源共用 相信很多人使用API 時候可能會遇到這問題,例如 : localhost to ip串接不上之類問題,原則上是”跨來源資源共用”在搞鬼。
Cors 概念中,我們把網站當作(A) 、API為(B)來解釋,A需要透過B取得資訊,傳有一個資料相關內容稱為 “request”,B會確認A的來源是否一樣(same origin)就會讓他執行進去。從中得知(B)是決定(A)是否有權限取得資源。
使用 Core API 這便我使用 vs 開啟 API,必須要注意有沒有選擇 OpenApi這功能會幫你開啟SwaggerUI相當方便。
這邊使用方式以後再來介紹,下方為產生完畢的function,我們就可以在下方指令區塊輸入 dotnet watch 完成開啟API localhost動作。 
1 2 3 4 5 6 7 8 9 10 11 12 [HttpGet ] public  IEnumerable<WeatherForecast> Get (){     var  rng = new  Random();     return  Enumerable.Range(1 , 5 ).Select(index => new  WeatherForecast     {         Date = DateTime.Now.AddDays(index),         TemperatureC = rng.Next(-20 , 55 ),         Summary = Summaries[rng.Next(Summaries.Length)]     })     .ToArray(); } 
 
創建html 創建 html 用意取得剛才的api,必須要使用Live Share 才能看得到錯誤訊息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <!DOCTYPE html > <html  lang ="en" > <head >     <meta  charset ="UTF-8" >      <meta  http-equiv ="X-UA-Compatible"  content ="IE=edge" >      <meta  name ="viewport"  content ="width=device-width, initial-scale=1.0" >      <script  src ="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"  integrity ="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="  crossorigin ="anonymous"  referrerpolicy ="no-referrer" > </script >      <title > Document</title >  </head > <body > <script >     $.ajax ({         method :'get' ,         url :'https://localhost:5001/WeatherForecast' ,         success : function (rep ){             console .log (rep);         }     }) </script > </body > </html > 
 
設定 Cors 現在到 API > Startup.cs 設定。下方範例省略不重要的設定。 從錯誤訊息可以知道,origin有問題會跟API也就是後端去確認情況。設定相當簡單只需要AllowAnyOrigin()  就完成了,這邊要注意這是針對全域設定方式,如果要自定義下一章再來介紹。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public  void  ConfigureServices (IServiceCollection services ){     ...     ...     services.AddCors(options=>     {         options.AddDefaultPolicy( builder =>         {             builder.AllowAnyOrigin();         });     });     ...     ... } public  void  Configure (IApplicationBuilder app, IWebHostEnvironment env ){     ....     ....     app.UseCors();     ....     .... } 
 
範本 dotnetCore_CorsExample