动作委托未在 ConfigureServices 中配置 mvc

Action delegate not configuring mvc in ConfigureServices

我已经开始学习 asp.net 核心并努力提高我的 c# 知识。

我在启动时遇到 ConfigureServices 问题 class。

    public void ConfigureMvcOptions(MvcOptions options)
    {
        options.EnableEndpointRouting = false;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        Action<MvcOptions> options = new Action<MvcOptions>(ConfigureMvcOptions);
        services.AddMvc(options);
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseMvcWithDefaultRoute();

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello world");
        });
    }

以上导致编译错误

"Warning MVC1005 Using 'UseMvcWithDefaultRoute' to configure MVC is not supported while using Endpoint Routing. To continue using 'UseMvcWithDefaultRoute', please set 'MvcOptions.EnableEndpointRouting = false' inside 'ConfigureServices'"

我可以通过在 AddMvc 方法中使用 Lambda 表达式来消除错误,但我不明白为什么会这样

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc((options) => options.EnableEndPointRouting = false);
}

以上操作没有问题。我只是不明白我对 Action 委托的实现有什么问题?

有一个 Roslyn Analyzer 可以检查您使用 UseMvcUseMvcWithDefaultRoute 但您没有将 EnableEndPointRouting 设置为 [=13] 的情况=].不幸的是,此分析器不够智能,无法检测到您的 ConfigureMvcOptions 方法 确实 EnableEndPointRouting 设置为 false

这意味着避免此警告的唯一方法是设置内联值,正如您使用所显示的修复所做的那样。值得注意的是,将 MVC 与 ASP.NET Core 3+ 一起使用的推荐设置是使用端点路由,而不是禁用它。