Проблема:
Я создаю приложение API с NET Core 3.1. Я бы не хотел устанавливать атрибут маршрута для каждого ApiControllers
и Действия. Я пробовал много комбинаций за UseEndpoints
, чтобы установить обычный маршрут, но у меня ничего не вышло.
С некоторой конфигурацией я не могу заставить работать Api, с некоторыми другими я получаю это исключение во время запуска:
InvalidOperationException: действие «ApiIsWorking» не имеет маршрута атрибута. Методы действий на контроллерах, аннотированных ApiControllerAttribute, должны быть маршрутизированы по атрибутам.
Как я могу настроить startup.cs
на автоматическое сопоставление контроллеров с их именем класса и действиями с их именем метода?
Спасибо!
Какой-то код:
startup.cs
...
services.AddControllers()
...
app.UseHttpsRedirection()
.UseRouting()
.UseAuthentication()
.UseEndpoints(endpoints => ?? )
.UseCoreHttpContext()
.UseServerConfiguration();
controller.cs
[ApiController]
public class BaseAPI : ControllerBase
{
[HttpGet]
public string ApiIsWorking()
{
return "API is working!";
}
}
Решение:
Как говорит Реза Агаей в решении, ошибка заключалась в добавлении атрибута ApiController. После того, как я его удалил, начинает работать команда UseEndpoints.
Моя ошибка заключалась в том, что я добавил атрибут, чтобы иметь возможность распознавать, какие классы должны быть доступны через API. В этом не было необходимости, потому что UseEndpoints отображает только классы, унаследованные от ControllerBase.
Предупреждение:
1) Обычная маршрутизация требует атрибута [FromBody]
в параметрах действий.
2) Я выделяю ответ Зинова об обычных проблемах маршрутизации с Swashbuckle в .NET Core.
[ApiController]
из контроллера и настроить маршрут вUseEndpoints
. - person Reza Aghaei   schedule 16.02.2020