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)
沒有留言:
張貼留言