Во-первых, я хотел бы понять, почему он останавливается и не пытается связать модель из строки запроса.
Атрибут [ApiController]
добавляет настройки к Модель приложения используется в ASP.NET Core MVC.Одна из этих настроек заключается в том, как определяется источник для привязки модели.Для каждого найденного действия вызывается функция InferParameterBindingSources
внутри ApiBehaviorApplicationModelProvider
, которая включает следующий код:
for (var i = 0; i < actionModel.Parameters.Count; i++)
{
var parameter = actionModel.Parameters[i];
var bindingSource = parameter.BindingInfo?.BindingSource;
if (bindingSource == null)
{
bindingSource = InferBindingSourceForParameter(parameter);
parameter.BindingInfo = parameter.BindingInfo ?? new BindingInfo();
parameter.BindingInfo.BindingSource = bindingSource;
}
}
ВызовInferBindingSourceForParameter
является наиболее уместным здесь, который включает следующий код:
var bindingSource = IsComplexTypeParameter(parameter) ?
BindingSource.Body :
BindingSource.Query;
Как видно выше, код проверяет параметр (GetDeviceTypeRequest request
в вашем примере), чтобы увидетьесли это сложно (что в вашем примере).Учитывая, что он действительно сложный, параметр настроен для использования из тела запроса.
Во-вторых, почему он пытается получить данные из тела, в первую очередь, для метода Get?
Поскольку все это выполняется как часть настройки модели приложения ASP.NET Core MVC, нет контекста в полете, чтобы определить, является ли это запросом GET или POST.Сказав это, я предполагаю, что было бы достаточно просто использовать атрибут [HttpGet]
, который находится в самом действии, чтобы определить, что запрос будет GET-запросом, но я не могу быть уверен, что это довольно просто.Это может быть вызвано как проблема на GitHub для ASP.NET Core MVC, но это будет критическое изменение .