我应该使用AddMvc或AddMvcCore进行ASP.NET Core MVC开发吗?

Mon*_*mer 55 c# asp.net-core-mvc

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

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

    public class Startup {

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

        // etc.
Run Code Online (Sandbox Code Playgroud)

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

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore(); // as opposed to:
    //services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)

我在这里做的是正确的吗?

tra*_*r0x 68

看一下ASP.NET Core GitHub repo上的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.AddCacheTagHelper();

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

    // +10 order
    builder.AddJsonFormatters();

    builder.AddCors();

    return new MvcBuilder(builder.Services, builder.PartManager);
}
Run Code Online (Sandbox Code Playgroud)

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

AddMvcCore()顾名思义,它只添加核心组件,要求您自己添加任何其他中间件(项目所需).

AddMvc()内部调用AddMvcCore()并添加其他中间件,如Razor视图引擎,JSON格式化程序,CORS等.

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

  • 从ASP.NET Core 3.0开始,它将变得更加细粒度。例如,如果您仅需要MVC的控制器部分(例如,您正在构建Web API),则可以调用`services.AddControllers()`,从而跳过当前必需的不必要的视图引擎初始化。 (3认同)