MVC升級.NET
當初接手這個專案,主管希望將架構更新為.Net,公司內的RD只有我接觸過.Net的框架於是這個重責大任落到了我身上
專案完成後也寫了份文件原本是寫在HackMD上面,那時候還沒有架設WordPress Blog,只做了簡略的紀錄
現在有時間好好將其整理成比較有條理和段落的文章,不敢說是一篇教學
將我在專案上 ASP .NET MVC 5 前進 .NET 所遇到的痛點做個整理
Dependency Injection
Dependency Injection 是為了解決程式設計中依賴耦合度的問題, (Inversion Of Control, IoC),以往在MVC中開發的時候我們都習慣用new ()來instance一個類別,而DI相依於抽象而不倚賴實作,也是讓許多開發人員不習慣的地方,我一開始也遇到這樣的狀況,想依靠實作和static class來解決,但是在 .NET中要取得服務的方式最終還是靠DI,可以說不用DI在 .NET 中想做事情是十分困難的,也是進入 .NET 世界中碰到的一個課題。
Middleware
過去 ASP .NET 中使用的 HTTP Modules 及 HTTP Handlers,在 ASP .NET Core 中已不復存在,取而代之的是 Middleware。
Middleware 除了簡化了 HTTP Modules/Handlers 的使用方式,還帶入了 Pipeline 的概念。
如何將DataBase 用DI的方式取得?
公司的專案是運用MongoDB,如果運用SQL Sever會更加的簡單好入手
先在appsettings.json檔案中準備好DBConnectionString以及要連線的Database名稱
新增一個 DatabaseSettings的class來存取連接字串以及DataBase
再新增一個MongoContext class
_client = new MongoClient(AES.Decrypt(options.Value.ConnectionString));
這邊是有用AES加密連線字串如果不需要對其進行加密
直接寫成:_client = new MongoClient(options.Value.ConnectionString);
選擇Singleton註冊在 DI 容器的 Service
BundleConfig
在原先的MVC中App_Start中的BundleConfig來實現網站的CSS和JS檔的打包作業,.NET 中我們依靠擴展套件來完成
https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BundlerMinifier
安裝好後在專案中的CSS 或 JS 檔案點選右鍵
會發現多了Bundler & Minifier這一個項目
在”outputFileName”: 這邊輸入壓縮之後要輸出的路徑和檔案名稱
專案重新建置後就會產生對應的
bundle.min.css
bundle.min.js
接下來在需要的View中引用
取得身分認證
最新版本的 .Net 改成Razor Pages來獲得身分認證,Razor Pages是 .NET Core 2.0時所增加的開發方式。
目前 .NET 的開發分為三種
- MVC
- Razor Pages
- .NET Blazor
Razor Pages又回到了原先在寫WebForm時的Model-View-ViewModel(MVVM)設計模式,實現Binding,能夠讓原先沒有學過MVC的WebForm設計師,能以較熟悉的開發模式進入 .NET 的世界,其輕量、簡潔的特色也有利於專案的開發速度以及維護,也是微軟目前想在 .NET主推的項目,其基底與MVC差不多只是採用不同的Route 以及程式邏輯寫在不同的位置。
Razor Pages做Identity
Tag Helpers
Tag Helpers are introduced with ASP .NET Core.
Tag Helpers enable server-side code to participate in creating and rendering HTML elements in Razor files.
Tag Helpers are very focused around the html elements and much more natural to use.
HTML Helper 與 Tag Helper的差異
_Layout獲取appsettings.json中的value
部屬至IIS
至IIS的模組
查看是否有安裝上 .Net Core Runtime
後記
在專案中我記得還有做資料庫的initializer以及更詳細的身分認證設定,但內容跟公司的內部資料有關就沒有寫進文件裡面了
之後回來補充的話用簡單的測資來演示,有任何錯誤或紕漏的地方歡迎前輩們不吝賜教,請用力鞭策?!
對.Net 架構 有興趣想專研的朋友可以參考Udemy上面Bhrugen Patel老師的課程,這篇文章的內容有些也來自於他的講義
https://www.udemy.com/course/complete-aspnet-core-21-course/?couponCode=DNM_12012022
關於Middleware 更詳細的資訊可以前往John Wu前輩的部落格https://blog.johnwu.cc/article/ironman-day03-asp-net-core-middleware.html