Ошибка MVC1005 Using 'UseMvc' to configure MVC is not supported while using Endpoint Routing

355
03 мая 2022, 22:00

У меня есть проект Asp.Net core 2.2

Недавно я поменял версию с 2.2 на 3.0 Preview 8. После этого изменения я увидел следующее предупреждение:

using 'UseMvc' to configure MVC is not supported while using Endpoint Routing. To continue using 'UseMvc', please set 'MvcOptions.EnableEndpointRouting = false' inside 'ConfigureServices'.

Я понимаю, что можно поставить настройку EnableEndpointRouting в false и решить проблему, но хочу понять какой подходщий путь следует использовать и почему Endpoint Routing не требует функций UseMvc().

Свободный перевод вопроса Using 'UseMvc' to configure MVC is not supported while using Endpoint Routing от участника @Mehrdad Babaki.

Answer 1

Нашёл решение в официальной документации "Migrate from ASP.NET Core 2.2 to 3.0":

Есть три подхода:

  1. Замена UseMvc или UseSignalR на UseEndpoints

В моём случае результат будет выглядеть так:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        //Old Way
        services.AddMvc();
        // New Ways
        //services.AddRazorPages();
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseStaticFiles();
        app.UseRouting();
        app.UseCors();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
        });
        
    }
}

Или 2. Использование AddControllers() и UseEndpoints()

public class Startup
{
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseStaticFiles();
        app.UseRouting();
        app.UseCors();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
        
    }
}

Или
3. Запрет endpoint Routing. То как предлагалось в сообщении с exception'ом и как упомянуто в следующем разделе документации: use mvcwithout endpoint routing


services.AddMvc(options => options.EnableEndpointRouting = false);
//OR
services.AddControllers(options => options.EnableEndpointRouting = false);

Свободный перевод ответа https://stackoverflow.com/a/58267385/5752652 от участника @Sergii Zhuravskyi.

READ ALSO
Как изменить значение экземпляра класса или структуры изнутри самого класса или структуры?

Как изменить значение экземпляра класса или структуры изнутри самого класса или структуры?

У меня есть структура, в которой есть поле Mod, высчитываемое при инициализации:

234
Имя 'Ajax' не существует в текущем контексте

Имя 'Ajax' не существует в текущем контексте

Следующий код @using (AjaxBeginForm("CheckChanging", new AjaxOptions { UpdateTargetId = "results" })) вызывает ошибку CS0103 Имя "Ajax" не существует в текущем контексте

154
Как реализовать передачу пакета на UDP server?

Как реализовать передачу пакета на UDP server?

Реализовать программы клиента и сервера, работающие по протоколу UDPКлиент каждые 10 секунд отправляет на сервер пакет данных

258
Парсинг атрибута transform SVG с помощью javascript

Парсинг атрибута transform SVG с помощью javascript

Предположим, у нас есть строка преобразования SVG:

328