Есть такая странная ошибка при добавлении api контроллера в работающий проект: собирается, но при старте проекта выдаёт вместо индексной страницы сайта ошибку:
An unhandled exception occurred while processing the request.
InvalidOperationException: Action 'WebApp.Areas.Admin.Controllers.CityApiController.All (WebApp)' has more than one parameter that was specified or inferred as bound from request body. Only one parameter per action may be bound from body.
Inspect the following parameters, and use 'FromQueryAttribute' to specify bound from query, 'FromRouteAttribute' to specify bound from route, and 'FromBodyAttribute' for parameters to be bound from body: Query query CancellationToken cancellationToken
Microsoft.AspNetCore.Mvc.Internal.ApiBehaviorApplicationModelProvider.InferParameterBindingSources(ActionModel actionModel)
Контроллер совершенно рядовой, у меня в другом проекте практически такой же работает без проблем:
public class CityApiController : AdminApiControllerBase
{
public CityApiController(IMediator mediator)
: base(mediator)
{
}
[HttpPost]
public async Task<object> All(Cities.List.Query query, CancellationToken cancellationToken)
{
var result = await this.Mediator.Send(query, cancellationToken);
return result;
}
}
[ApiController]
[Route("api/[controller]/[action]")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class AdminApiControllerBase : Controller
{
public AdminApiControllerBase(IMediator mediator)
{
this.Mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
}
protected readonly IMediator Mediator;
}
Что это может быть такое? Хочется понять и разобраться. На новичковую ошибку не похоже.
Нашёл любопытный баг на гитхабе: ApiControllerAttribute incorrectly infers CancellationToken parameter as FromBody
В двух словах: поведение для FromBody разнится для 2.0 и 2.1 поэтому необходимо явно выставлять режим совместимости:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Проект, который не запускался, был как раз проектом 2.0, многократно переделанном и потом переведённом на 2.1
Продвижение своими сайтами как стратегия роста и независимости