Подтвердить что ты не робот

Как использовать API-интерфейс атрибутов ASP.NET Web API с помощью сложного параметра объекта?

У меня есть действие веб-API, которое выглядит следующим образом:

[HttpGet]
[Route("api/query/hello/{query}")]
public HttpResponseMessage Hello([FromUri]Query query)
{
    return null;
}

где класс Query имеет свойство публичной строки с именем QueryText. Когда я нажимаю следующий URL-адрес, я получаю ошибку 404:

/api/query/hello?QueryText=bacon

Это работало до того, как я начал использовать маршрутизацию атрибутов. Если у меня нет параметров или параметров примитивного типа, я могу заставить Attribute Routing работать. Но со сложным параметром я получаю 404s. Как Атрибутная Маршрутизация работает со сложными параметрами действия? Является ли он совместимым с атрибутом FromUri?

4b9b3361

Ответ 1

Решением здесь было то, что токен {query} в определении маршрута был лишним. Извлекая его, следующим образом, исправили проблему:

[Route("api/query/hello")]

Ответ 2

Атрибут [FromUri] понадобится, потому что вы читаете URL-адрес. Ваш маршрут должен выглядеть примерно так:

public HttpResponseMessage Hello([FromUri]Query query)
{
    //Implement whatever
    return null;
}

/api/{Имя контроллера}/hello? QueryText = bacon

Должно работать правильно.

Модельное связующее возьмет любые параметры запроса, которые вы предоставили, затем попытайтесь связать все, что находится внутри этого объекта Query. Я буду беспокоиться о атрибуте маршрута после того, как вы его сначала начнете.