Ответ 1
Решением здесь было то, что токен {query}
в определении маршрута был лишним. Извлекая его, следующим образом, исправили проблему:
[Route("api/query/hello")]
У меня есть действие веб-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
?
Решением здесь было то, что токен {query}
в определении маршрута был лишним. Извлекая его, следующим образом, исправили проблему:
[Route("api/query/hello")]
Атрибут [FromUri] понадобится, потому что вы читаете URL-адрес. Ваш маршрут должен выглядеть примерно так:
public HttpResponseMessage Hello([FromUri]Query query)
{
//Implement whatever
return null;
}
/api/{Имя контроллера}/hello? QueryText = bacon
Должно работать правильно.
Модельное связующее возьмет любые параметры запроса, которые вы предоставили, затем попытайтесь связать все, что находится внутри этого объекта Query
. Я буду беспокоиться о атрибуте маршрута после того, как вы его сначала начнете.