安裝 Ubuntuvue
dotnet core 跨平臺已再也不是夢,它帶來的意義非凡,好比api接口能夠在linux上編寫及部署,也能夠在windows上編寫好,打包發佈,而後copy到linux上部署。從官網下載最新版本, 而後裝到虛擬機VMware中。若是是centeros,系統開啓後,默認進入命令行模式,估計一部分同窗,看到相似dos界面,有點恐慌,不急,在命令行中輸入startx回車,進入到圖形界面。不管是哪一種系統,虛擬機上裝的操做系統,在開機啓動後,都有可能窗口不能自適應,也就是說不能全屏,很是小。針對windows,直接運行VMware Tools便可。針對linux系統,咱們直接雙擊是安裝不了的。這是Ubuntu漂亮的紫色界面:linux
輸入密碼,登陸到系統中。定位到VMware Tools安裝目錄,它仍是tar.gz壓縮文件,因此首先解壓縮,用cd命令轉到解壓後的目錄(直接打開目錄,而後鼠標右鍵打開終端,就不用cd了),輸入./vmware-install.pl,一路回車。web
安裝vscodewindows
從官網下載vscode,上面有註明操做系統。centeros是從redhat發展而來的。ubantu是基於Debian。前者擅長服務器端,後者主要是pc端。api
一、下載安裝包 .deb package (64-bit)bash
二、sudo apt install ./<file>.deb服務器
三、Then update the package cache and install the package using:ide
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code # or code-insiders
linux上安裝vscode的確能麻煩一些。安裝完了後,不知道裝到哪兒去了。因而就搜索vscode,沒有找到,搜索全名也沒有找到,後來發現名稱叫code,終於搜索到了,把code加入到桌面的收藏夾裏,就出如今桌面左側,至關windows的桌面快捷方式。以下圖:post
部署dotnet core web API測試
在命令行中,輸入 dotnet new webapi,結果不識別dotnet,它不是命令,建議安裝.net core sdk,我裝了最新的版本2.2。而後再運行命令建立api。
打包發佈的命令:dotnet publish --configuration Release
自託管命令: dotnet ElectronInfoApi.dll
默認監聽的地址:https://localhost:5001
我想要改變端口,在網上找了一種方法:
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>() .UseUrls("https://localhost:5001/") .Build(); host.Run();
更改url或者端口均可以,這就是傳說中的硬編碼。由於上面的代碼是在 Main(string[] args)方法裏,因此能夠從命令行傳參,通過實踐,這種方式是能夠的。傳參:dotnet ElectronInfoApi.dll server.urls=https://192.168.19.1:9000,代碼中接受參數:var url=args.Length>0?args[0]:" ";
還有另一種方法,就是什麼都不用修改,這是命令行建立api的時候,自動生成的代碼:
public class Program {
public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup <Startup> (); }
發佈後運行結果:
IIS或者其它服務器上部署,端口配置,都有圖形化界面操做,不是什麼問題。我在linux上發佈了接口,而後window上的vue程序就能夠請求了。先在postman中測試:
好了,這樣linux上的接口部署完畢,測試成功。
dotnet core api 傳參
一、get請求傳參
[HttpGet]
[Route("Items")] public JsonResult GetAll(int pageSize, int pageIndex) { AjaxResult result = new AjaxResult(); var list = DbHelper.Select<Achievement>(); var companys = DbHelper.Select<Company>(); var users = DbHelper.Select<User>(); //轉換爲ViewModel List<AchievementViewModel> models = new List<AchievementViewModel>(); foreach (var item in list) { var vm = ModelConvertion.Convert<AchievementViewModel, Achievement>(item); var company = companys.SingleOrDefault(c => c.Id == item.CompanyId); vm.CompanyName = company == null ? "" : company.CompanyName; var user = users.SingleOrDefault(u => u.Id == item.Completer); vm.CompleterName = user == null ? "" : user.UserName; models.Add(vm); } result.Data = models.OrderByDescending(f => f.PublishDate).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); result.ItemCount = models.Count; return Json(result); } [HttpGet("{id}")] public ActionResult<Achievement> GetById(int id) { return DbHelper.SingleById<Achievement>(id); }
兩種方法,一個把參數放到路由裏,一個不放,均可以,根據狀況決定。不建議在接收的時候,使用對象接收,由於可能接收不到參數,對象前加上[FromUrl],不知道能不能收到,有興趣的同窗能夠嘗試。
二、post方法
[HttpPost]
[Authorize]
public JsonResult item([FromBody] Achievement item) { AjaxResult result = new AjaxResult(); try { if (DbHelper.Exist<Achievement>(b => b.Id == item.Id)) { result.IsSuccess = DbHelper.Update<Achievement>(item) > 0; } else { result.IsSuccess = DbHelper.Insert<Achievement>(item, true) > 0; } } catch (Exception ex) { result.IsSuccess = false; result.Message = "保存出錯"; this.Log().Error("保存出錯", ex); } return Json(result); } [HttpPost] [Route("[action]/{id}")] [Authorize] public ActionResult Delete(int id) { AjaxResult result = new AjaxResult(); if (DbHelper.Delete<Achievement>(c => c.Id == id) > 0) { result.IsSuccess = true; UserManager.DeleteUserRef(id,2); } else { result.IsSuccess = false; } return Json(result); }
post時,數據也能夠從路由來,也能夠直接傳,接收時,若是以對象接收,前面加上[FromBody]。不然部署後,頗有可能接收不到參數。