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);

開啟Program.cs
從appsettings.json拿到我們準備好的
ConnectionString
Database

選擇Singleton註冊在 DI 容器的 Service

回到Controller
在Constructor取得我們注入的Database

BundleConfig

在原先的MVC中App_Start中的BundleConfig來實現網站的CSS和JS檔的打包作業,.NET 中我們依靠擴展套件來完成
https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BundlerMinifier

安裝好後在專案中的CSS 或 JS 檔案點選右鍵
會發現多了Bundler & Minifier這一個項目

將想打包的套件加入後會產生bundleconfig.json檔

在”outputFileName”: 這邊輸入壓縮之後要輸出的路徑和檔案名稱

專案重新建置後就會產生對應的
bundle.min.css
bundle.min.js
接下來在需要的View中引用

取得身分認證

最新版本的 .Net 改成Razor Pages來獲得身分認證,Razor Pages是 .NET Core 2.0時所增加的開發方式。
目前 .NET 的開發分為三種

  1. MVC
  2. Razor Pages
  3. .NET Blazor

Razor Pages又回到了原先在寫WebForm時的Model-View-ViewModel(MVVM)設計模式,實現Binding,能夠讓原先沒有學過MVC的WebForm設計師,能以較熟悉的開發模式進入 .NET 的世界,其輕量、簡潔的特色也有利於專案的開發速度以及維護,也是微軟目前想在 .NET主推的項目,其基底與MVC差不多只是採用不同的Route 以及程式邏輯寫在不同的位置。

Razor Pages做Identity

在Program.cs指定Cookie的名稱
設定登入驗證的畫面
拒絕訪問頁面
設定Cookie生命週期

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

安裝 .Net Core Runtime

至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


Visited 45 times, 1 visit(s) today

Leave A Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *