Отладка маршрутов ASP.NET Web API с помощью Route Debugger

| Понедельник, 29 апреля, 2013

Метки: ASP.NET Web API Комментарии: 0

Пример 2: Неоднозначное значение по умолчанию

Контроллер:

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable Get()
    {
        return new string[] { "value1", "value2" };
    }
    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
    // POST api/values
    public void Post([FromBody]string value)
    {
    }
    // PUT api/values/5
    public void Put(int id, [FromBody]string value)
    {
    }
    // DELETE api/values/5
    public void Delete(int id)
    {
    }
  
    [HttpGet]
    public void Machines()
    {
    }
    public void Machines(int id)
    {
    }
}

Маршрут:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { action = "get", id = RouteParameter.Optional }
);

Тест: Следующие пути работают корректно.

  • /api/Values
  • /api/Values/Machines
  • /api/Values/Machines/100

Но путь /api/Values/1 возвращает ошибку 404.

Обзор результатов:

  1. В секции данных маршрута (Route Data) можно увидеть , что значение "action" равно "1".
  2. Заметим, что, хотя, значение по умолчанию для "action" установлено "get", но метод действия определен как "1".
  3. Контроллер выбран "Values".
  4. Никакой метод действия не выбран. В столбце "By Action Name" (По имени метода действия) все значения установлены как "False". Это значит, что ни один метод не подошел по имени, которое было определено из данных маршрута.

Анализ результатов:

Тут есть два важных момента:

  1. Выбор значения из адреса имеет больший приоритет, чем значение по умолчанию.
  2. Так как значение "action" содержится в url, то селектор метода действия использует это значение для выбора метода.

Отладчик маршрутов показывает, что в адресе, http://localhost:xxx/api/values/1, именем метода действия является "1", но такого метода не существует.

Решение:

Использовать одну стратегию задания соответствия метода действия. Или по url или по умолчанию.

Комментарии
Никто еще не оставил здесь комментарий.
Войдите, чтобы написать комментарий , или воспользуйтесь формой ниже.
 

Copyright © CodeHint.ru 2013-2020