一、創建項目
新建api項目:

建好之后,一個默認的控制器已經有了:



運行就可以直接訪問get接口獲取數據:

二、跨平台部署
部署方面,微軟已經完善的很好了,基本上算是傻瓜式操作。項目右鍵選擇發布:

部署模式可以采用框架依賴,或獨立,選擇框架依賴,則需要在目標平台安裝netcore運行時后才能運行netcore程序。

平台可以選擇windows或linux:

發布完成后,直接運行“dotnet *.dll”即可將api服務建立起來,默認建立http的5000端口和https的5001端口,可直接訪問。

三、客戶端訪問代碼
/// <summary> /// post函數 /// </summary> /// <param name="url">服務器post地址</param> /// <param name="args">api參數</param> async void PostData(string url, string[] args) { var httpClient = new HttpClient(); //Post數據序列化 var json = Newtonsoft.Json.JsonConvert.SerializeObject(args); var stringContent = new StringContent(json); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); //設定安全協議,不然訪問默認的netcore地址會報錯:基礎流已關閉 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11; var response = await httpClient.PostAsync(url, stringContent); var str = await response.Content.ReadAsStringAsync(); Console.WriteLine("post:" + str); }
四、遇到的問題與解決
在本機用localhost,127.0.0.1等地址訪問都沒問題,當想測試linux環境,在centos虛擬機里服務運行后,在本機就是無法訪問,但是在虛擬機內部又是沒問題的。通過搜索引擎查詢並解決,下面是問題與解決方法,排名不分先后。
1.運行報錯Couldn't find a valid ICU package installed on the system.
安裝icu庫,運行命令:yum install icu
2.防火牆問題
(1) 查看狀態:firewall-cmd --state
(2) 關閉防火牆:systemctl stop firewalld
3.外部無法訪問
默認的localhost只能本地訪問,需要在代碼中指定:WebHost.CreateDefaultBuilder(arg).UseUrls("http://*:5000") .UseStartup<Startup>();
或在部署是直接指定:dotnet *.dll --urls http://*:5000
4.連接sqlserver2008R2服務器超時
Netcore在linux下如果SqlServer2008低於SP3版本,會出現連接超時的問題。只要去官方下載SqlServer 2008 Sp3 補丁安裝即可。
https://www.cnblogs.com/weiweithe/p/7810803.html
五、卷尾
Netcoreapi提供了一個新的解決方案,方便用戶采用同一套代碼構建跨平台程序,大大減少了開發工作量。微軟正在准備NetCore3.0的發布,面向圖形化界面的開發,發布后netcore的應用面應該會更廣。
學海無涯,共同進步。
