歡迎光臨
每天分享高質量文章

AddMvc 和 AddMvcCore 的區別

目錄

本文出自《從零開始學 ASP.NET CORE MVC》目錄 
影片課程效果更佳:從零開始學 Asp.Net Core MVC

ASP.NET Core 為什麼有 AddMvc 和 AddMvcCore 他們是什麼關係?

在本影片中,我們將討論 AddMvc()和 AddMvcCore()方法之間的區別。

要在 ASP.NET Core 應用程式中設定 MVC,我們在 Startup 類的 ConfigureServices()方法中呼叫 IServiceCollection 介面的 AddMvc()方法。

services.AddMvc();

除了 AddMvc()方法,我們在 IServiceCollection 介面上也有 AddMvcCore()方法。 因此,我們想到的一個顯而易見的問題是,這兩種方法之間的區別是什麼。

AddMvc() v/s AddMvcCore()

在我們討論 AddMvc()和 AddMvcCore()方法之間的區別之前,讓我們修改以下 HomeController 以傳回 JSON 格式的資料,而不是簡單的字串。

目前,沒有為 HomeController 類指定基類。 它現在還可以為我們從 Index()動作方法傳回一個簡單的字串。

public class HomeController
{
public string Index()
{
return "Hello from MVC";
}
}

但是,如果我們想要從 Index()操作方法傳回 HTML 檢視或 JSON 資料,則我們的 HomeController 類必須繼承框架提供的 Controller 類。 Controller 基類提供了傳回不同結果的支援,如 JsonResult,ViewResult,PartialViewResult 等。 修改 HomeController 類以從 Controller 類派生並從 Index()方法傳回 JsonResult,如下所示。

public class HomeController : Controller
{
public JsonResult Index()
{
return Json(new { id=1, name="pragim" });
}
}

請註意:Controller 類存在於 Microsoft.AspNetCore.Mvc 名稱空間中。

此時,執行應用程式,我們應該按預期在瀏覽器中看到 JSON 資料。

現在,在 ConfigureServices()方法中呼叫 AddMvcCore()方法而不是 AddMvc()並執行應用程式。

public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore();
}

我們收到以下錯誤

沒有為“Microsoft.AspNetCore.Mvc.Formatters.Json.Internal.JsonResultExecutor”型別的服務註冊

為了能夠傳回 JSON 資料,需要在依賴註入容器中註冊 JsonFormatterServices。AddMvc()方法執行此操作,但不執行 AddMvcCore()方法。您可以透過檢視 ASP.NET Core MVC Github 頁面上的原始碼來確認這一點。

https://github.com/aspnet/Mvc/blob/release/2.2/src/Microsoft.AspNetCore.Mvc/MvcServiceCollectionExtensions.cs

顧名思義,AddMvcCore()方法只新增核心 MVC 服務。另一方面,AddMvc()方法添加了所有必需的 MVC 服務。AddMvc()方法在內部呼叫 AddMvcCore()方法,以新增所有核心 MVC 服務。因此,如果我們呼叫 AddMvc()方法,則無需再次顯式呼叫 AddMvcCore()方法。

我希望這可以澄清 AddMvc()和 AddMvcCore()方法之間的區別。

贊(0)

分享創造快樂