Проблема:
Я создаю приложение API с NET Core 3.1. Я хотел бы избежать установки атрибута маршрута для каждого ApiControllers
и действий. Я пробовал множество комбинаций на UseEndpoints
для установки обычного маршрута, но у меня ничего не получается.
При некоторых настройках я не могу заставить работать Api, с некоторыми другими я получаю это исключение во время запуска:
InvalidOperationException: действие 'ApiIsWorking' не имеет атрибута route. Методы действий на контроллерах, аннотированных с помощью 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]
в действиях params.
2) Я выделяю ответ Зинова о проблемах обычной маршрутизации с Swashbuckle в. NET Core