前言
繼上篇 如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案 所遇到的升級問題再做一個小小的注意事項筆記
網站檔案路徑
在 ASP.NET MVC 可以透過 Server.MapPath()
來指定在伺服器上的路徑
例如:
public class HomeController : Controller
{
public ActionResult Index()
{
string docsPath = Server.MapPath("~/docs");
//...
}
}
而在 ASP.NET Core MVC 需要經由注入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment 來讀取環境變數
例如:
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 中的相依性插入
以此範例而言,每次要求就建立新的注入元件:
builder.Services.AddTransient<myservice>();
其他注意事項
檢視 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 的相關資料: