ABP .Net Core API和Angular前端APP獨立部署跨域問題(No Access-Control-Allow-Origin)


前言:

通過ABP官網(https://aspnetboilerplate.com)下載ASP.NET Core 2.x + Angular模板項目是按ReStful風格架構Web API和angular前端是分開獨立部署的,我一開始分開部署到IIS后,前端訪問API會產生跨域限制訪問的問題,通過查閱代碼,其實ABP框架自帶跨域設置訪問,只需要配置一下就可以了,步驟如下:

 

一 IIS部署

通過ABP官網模板創建項目,然后分別打包前端和后端程序發布到IIS:

我的后端發布到:http://localhost:8060/

我的前端發布到:http://localhost:8080/

 

F12 報錯 不允許跨域訪問:Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

 

二 配置說明

通過查看代碼有兩個配置的地方:

1. 前端配置在src/assets/appconfig.json

{
  "remoteServiceBaseUrl": "http://localhost:8060",
  "appBaseUrl": "http://localhost:8080"
}

remoteServiceBaseUrl 遠程訪問API URL, appBaseUrl 自身部署后的URL

 

2. 后端配置在Host項目 appsettings.json

"App": {
    "ServerRootAddress": "http://localhost:8060/",
    "ClientRootAddress": "http://localhost:8080/",
    "CorsOrigins": "http://localhost:8080/"
  }

ClientRootAddress 為客戶端站點配置, CorsOrigins 為允許跨域客戶端站點配置,可以有多個用逗號分開,配置在Startup.cs里進行配置

// Configure CORS for angular2 UI
services.AddCors(options =>
{
  options.AddPolicy(DefaultCorsPolicyName, builder =>
    {
       // App:CorsOrigins in appsettings.json can contain more than one address separated by comma.
       builder
       .WithOrigins(_appConfiguration["App:CorsOrigins"].Split(",", StringSplitOptions.RemoveEmptyEntries)
       .Select(o => o.RemovePostFix("/"))
       .ToArray())
       .AllowAnyHeader()
       .AllowAnyMethod();
     });
});

 

三 運行

配置后再次訪問客戶端 訪問成功

 

如果配置沒有問題,在PUT和DELETE請求仍然包跨域問題,很有可能是服務器限制了謂詞訪問,請參考博客:http://www.cnblogs.com/donaldtdz/p/8094300.html

如想前后端集成一起部署請查博客:http://www.cnblogs.com/donaldtdz/p/7882316.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM