我应该在 ASP.NET 核心 MVC 开发中使用 AddMvc 还是 AddMvcCore?

我正在从一本书中学习 ASP.NET Core MVC,有问题的代码片段如下:

// CHAPTER 4 - ESSENTIAL C# FEATURES
namespace LanguageFeatures {


public class Startup {


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


// etc.

因为这本书是关于 ASP.NET Core MVC 而不是 ASP.NET MVC 的,我认为我必须使用 AddMvcCore()而不是 AddMvc(),如下所示:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore(); // as opposed to:
//services.AddMvc();
}

我这么做对吗?

22212 次浏览

看看 NET 核心 GitHub 回购上的 MvcServiceCollectionExtensions.cs课程:

public static IMvcBuilder AddMvc(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}


var builder = services.AddMvcCore();


builder.AddApiExplorer();
builder.AddAuthorization();


AddDefaultFrameworkParts(builder.PartManager);


// Order added affects options setup order


// Default framework order
builder.AddFormatterMappings();
builder.AddViews();
builder.AddRazorViewEngine();
builder.AddRazorPages();
builder.AddCacheTagHelper();


// +1 order
builder.AddDataAnnotations(); // +1 order


builder.AddCors();


return new MvcBuilder(builder.Services, builder.PartManager);
}

AddMvcCore()AddMvc()都返回一个可用于进一步配置 MVC 服务的 IMvcBuilder

顾名思义,AddMvcCore()只添加 MVC 管道的核心组件,需要您自己添加任何其他中间件(项目所需)。

AddMvc()在内部调用 AddMvcCore()并添加其他中间件,如 Razor 视图引擎、 Razor 页面、 CORS 等。

现在,我会按照你的教程建议,坚持 AddMvc()


从 ASP.NET Core 3.0开始,有一些额外的方法可以对 MVC 管道的哪些部分对应用程序进行细粒度控制,例如:

请参考 这篇文章和 MSDN 以获得更多关于它们的功能和使用时间的信息。