Контроллеры больше не вызывают после обновления с ASP.NET Core 2.0 до 2.2 - PullRequest
3 голосов
/ 20 марта 2019

Я обновил простой проект ASP.NET Core с 2.0 до 2.2, обновляя ссылки. В этом проекте (только) используются контроллеры MVC с атрибутами Route.

После обновления маршруты не найдены. Все HTTP-запросы заканчиваются на 404.

Я протестировал много комбинаций .SetCompatibilityVersion(...), но безуспешно. Из того, что я мог прочитать о таком обновлении, я не ожидал, что потребуются другие изменения.

Я попытался сравнить с новым проектом "webapi". Единственные различия, которые я вижу, это отсутствие UseHsts() и UseHttpsRedirection при запуске, отсутствие атрибута [ApiController] на контроллерах и контроллеры, производные от Controller вместо его базового ControllerBase. Я не понимаю, как это объясняет, почему контроллеры не вызываются и ожидали, что все это будет работать "как есть".

Контроллер:

    [Route("/")]
    public class RootController : Controller
    {
        private readonly ILogger _logger;

        public RootController(ILogger<RootController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IActionResult Index()
        {
            _logger.LogInformation("Ping received!");
            return new OkResult();
        }
    }

Запуск:

        public void ConfigureServices(IServiceCollection services)
        {
            // Unrelated stuff

            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            // More unrelated stuff
        }

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

            app.UseMvc();
        }

Куда мне смотреть?

EDIT : "Microsoft.AspNetCore.All фактически было изменено с 2.0.7 (с целевой структурой 2.1) на версию (с целевой платформой 2.2) в проекте. При компиляции и запуске с 2.0 вызывается контроллер.

1 Ответ

1 голос
/ 20 марта 2019

Есть некоторые проблемы с маршрутизацией в 2.2, связанные с ошибками в новой функции EndpointRouting. Проблемы будут исправлены в версии 3.0, но в версии 2.2 вы можете обойти эту проблему, отключив новую функцию, которая не нужна.

services.AddMvc(options => {
            options.EnableEndpointRouting = false;

        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...