將C# .Net Core API 部屬於 Ubuntu (Linux) 上,達到跨平台使用的目的,由於.Net Core 與 Ubuntu (Linux) 各自版本眾多,環境兼容上會出現很多的問題,因此需先將 Ubuntu (Linux) 的版本與.Net Core SDK 的版本確認好在進行環境的建置。
| 項目 | 版本 | 
| Ubuntu(Linux) | 20.04.2.0 | 
| .Net Core SDK (安裝於Ubuntu上) | 6.0.100 | 
| .Net Core SDK (Visual Studio 開發版本) | 3.1.415 | 
| Oracle VirtualBox | 6.1.14 r140239 (Qt5.6.2) | 
以下將會先以Ubuntu 20.04.2.0 與 .Net Core SDK 6.0.100作為解說。
 環境建置步驟:
1. 下載與安裝.Net Core SDK 
可參考官方文件:https://docs.microsoft.com/zh-tw/dotnet/core/install/linux-ubuntu#apt-troubleshooting
1.1. 下載 .Net core 安裝檔
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb1.2. 安裝 .Net core SDK
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0以上如果沒有出現錯誤訊息的話,代表已經順利安裝成功,可以直接跳至步驟2。
1.3. PubKey Error 
作者本身會遇到下圖"NO_PUBKEY B02C46DF417A0893"的狀況,導致無法順利完成安裝。
 
因此我們需要手動進行新增PubKey B02C46DF417A0893
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B02C46DF417A0893新增完成後,再重新執行步驟1.1與1.2即可成功安裝.Net Core SDK 6.0.100
參考:https://chrisjean.com/fix-apt-get-update-the-following-signatures-couldnt-be-verified-because-the-public-key-is-not-available/
 
2. 新增與部屬.Net Core Web API 於Ubuntu VM Server
2.1. 新增Web API
2.2. 命名專案名稱為UbuntuAPITest
2.3. 點選Create,完成建立新專案
2.4. 直接使用預設專案中的API "WeatherForecast",僅需於專案中的Program.cs 設定API運行的Port號,範例設定為5000
    public class Program
   {
       public static void Main(string[] args)
       {
           CreateHostBuilder(args).Build().Run();
       }
       public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
               .ConfigureWebHostDefaults(webBuilder =>
               {
                   webBuilder.UseUrls("http://*:5000");  //強制使用5000 port 
                   webBuilder.UseStartup<Startup>();
               });
   }2.5. 部署專案,於方案點右鍵進行Publish

2.6. 選擇Folder
2.7. 點選Publish
2.8. 將產出的Publish資料夾,加壓縮後複製到Ubuntu VM Server
2.9. 於Ubuntu資料夾中解壓縮,並刪除多餘的檔案
2.10. 啟用API Web,執行UbuntuAPITest.dll
dotnet UbuntuAPITest.dll2.11. 測試API Web,確認是否成功啟用
http://localhost:5000/weatherForecast3. 設定本機 Windows 連上 Ubuntu VM Server (這邊使用Oracle VirtualBox)
3.1. 點選設定
3.2. 網路→進階→連接埠轉送
3.3. 找出 VM 與 Windows 對應的IP與Port
於VM Terminal 使用 ifconfig 指令
ifconfig會去得以下兩個IP位址10.0.2.15、192.168.56.102
透過本機 Windows CMD 使用ipconfig指令,來分辨出哪個IP是Windows 本機可以連到的對外IP
ipconfig由上圖可知道,192.168.56.X 為 Windows 與 VM 共同存在的網段,因此歸類出以下的IP位址
Windows 對外IP位址 : 10.0.2.15
Windows 對內IP位址 : 192.168.56.1
VM對內IP位址 : 10.0.2.15
VM對外IP位址 : 192.168.56.102
3.4. 設定 VM 與 Windows 對應的IP與Port
3.5. 透過Postman 測試使否可連上VM Web API
取得Response,代表測試成功,同時代表已成功將.Net Core Web API 部署上 Ubuntu VM Server,恭喜你~
參考資料:
部署.Net Core API 專案到Ubuntu VM Server -
https://blog.txstudio.tw/2017/02/exec-aspnet-core-application-in-ubuntu.html
SDK 指定版本使用 - 
https://blog.miniasp.com/post/2018/04/19/How-to-switch-between-DotNet-SDK-versions