2023/02/20

[.NET] 升級 ASP.NET MVC 至 ASP.NET Core MVC 的注意事項

markdown ### 前言 繼上篇 [如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案](https://devmanna.blogspot.com/2023/02/howto-upgrade-using-net-upgrade-assistant.html) 所遇到的升級問題再做一個小小的注意事項筆記 ### 網站檔案路徑 在 ASP.NET MVC 可以透過 `Server.MapPath()` 來指定在伺服器上的路徑 例如: ```cs public class HomeController : Controller { public ActionResult Index() { string docsPath = Server.MapPath("~/docs"); //... } } ``` 而在 ASP.NET Core MVC 需要經由注入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment 來讀取環境變數 例如: ```cs public class MyService { public MyService(IWebHostEnvironment env) { string docsPath = $@"{env.CotnentRootPath}/docs"; } } ``` ### 網站靜態檔案路徑 在 ASP.NET MVC 的靜態檔案路徑基本上就是專案內的資料夾都可以,通用會以 Content 為放置靜態檔案 升級到 ASP.NET Core MVC 之後,wwwroot 目錄則為公開的根目錄,靜態資源檔案就需要放置在此處,而在 View 上有關的檔案路徑也要一併修正 ### 註冊依賴注入 (Dependency Injection) 如上面的 MyService 使用了 IHostEnvironment,如果在 Controller 勢必不能用 new 的方法來建立 MyService 而是要依賴注入 開啟 `Program.cs` 裡有一區 // Add services to the container 即是要把相關的 Services 註冊進來,否則會得到如: `InvalidOperationException: Unable to resolve service for type XXX while attempting to activate XXX` 而依賴注入在 ASP.NET Core MVC 有三種方式: AddSingleton, AddScoped, AddTransient 詳細使用方式請查看官方文件 [.NET Core 中的相依性插入](https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629) 以此範例而言,每次要求就建立新的注入元件: ```cs builder.Services.AddTransient(); ``` ### 其他注意事項 檢視 View 的部分,ASP.NET Core MVC 與 ASP.NET MVC 最大的差異是多了 Razor Page 及 Tag Helper。 據之前用 ASP.NET Core MVC (3.0) 版本開發專案時,使用 Tag Helper 的方式,至少可以減少前端切版提供檔案後,改寫標籤的幅度。 原先 View 的 .cshtml 在升級後大多能直接支援,但是若有用到例如:HttpContext, Modernizr 的 @Styles.Render, @Scripts.Render 都要修改掉。 更多 View 的相關資料: - [ASP.NET Core MVC 中的檢視](https://learn.microsoft.com/zh-tw/aspnet/core/mvc/views/overview?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629) - [ASP.NET Core 表單中的標籤協助程式](https://learn.microsoft.com/zh-tw/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629) ### 相關連結 - [在 ASP.NET 4.x 和 ASP.NET Core 之間進行選擇](https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/choose-aspnet-framework?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629) - [ASP.NET Core MVC 使用者入門](https://learn.microsoft.com/zh-tw/aspnet/core/tutorials/first-mvc-app/start-mvc?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629) - [教學課程:使用 ASP.NET Core 建立 Razor Pages Web 應用程式](https://learn.microsoft.com/zh-tw/aspnet/core/tutorials/razor-pages/?view=aspnetcore-7.0&WT.mc_id=DT-MVP-5002629)

沒有留言: