У меня есть две следующие настройки маршрутов, и они работают нормально при отправке действительного запроса.Разрешить идентификатор строки с помощью MVC-маршрута ASP.NET
config.Routes.MapHttpRoute("DefaultApiWithId", "{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "{controller}/{action}");
Я хотел проверить неверный запрос, чтобы убедиться, что ответ был верным. Я пытаюсь вызвать следующее действие в своем контроллере.
public HttpResponseMessage Get(string id)
{
//output the id again
}
Если я называю localhost:80/users/123
, я получаю ответ обратно, что является действительным, и он будет выводить 123
. Когда я пытаюсь использовать недопустимый ID
, например, тот, который содержит буквы с ошибкой со следующей ошибкой.
{ «Сообщение»: «Ни один HTTP ресурс не был найден соответствующий запрос URI „http://localhost:80/users/d1g“.», «MessageDetail»: "Никаких действий не было найдено на контроллере„Пользователи“, совпадающим с именем" d1g '. "}
Я вижу, что происходит не так. Этот запрос должен соответствовать первому маршруту, но вместо этого он соответствует второму маршруту. У меня есть 2 метода под названием Get
. Один принимает ID
, а другой не требует ID
. Тот, который не требует ID
, возвращает список всех записей. У меня были большие проблемы с этим, и маршрут выше - то, как я решил проблему.
Он не должен соответствовать первому маршруту. Этот маршрут имеет ограничение, которое допускает только числа 'new {id = @" \ d + "}' для параметра id. И это так, что он не столкнется с отображением второго маршрута – Nkosi
Я думаю, что для вашего первого GET вы указали маску здесь: 'new {id = @" \ d + "}', попробуйте удалить его. Но также я думаю, что у вас должен быть только один метод с простым решением: если «ID» передан, верните Object, иначе верните список. Но я бы пошел другим путем. –
Если я удалю ограничение, я получаю сообщение об ошибке «Было найдено несколько действий, соответствующих запросу: \ r \ nSystem.Net.Http.HttpResponseMessage Get()". Это имеет смысл, поскольку у меня есть 2 метода получения. Тот, который принимает идентификатор и другой, который не принимает ничего, чтобы вернуть список записей –