Как в веб-API перегрузить Get, если один метод содержит типы значений, допускающие значение NULL, в качестве параметров

ОБНОВЛЕНИЕ

Мое первоначальное предположение заключалось в том, что причиной проблемы были необязательные параметры. Это кажется неправильным. Вместо этого возникает проблема с несколькими методами действий, когда один из этих методов содержит типы значений, допускающие значение NULL (, например. инт? )для некоторых параметров.

Я использую Visual Studio 2012 RC и только начинаю работать с Web API. Я столкнулся с проблемой и получаю сообщение об ошибке «На контроллере «Барс» не найдено действие, соответствующее запросу».

У меня есть контроллер Барс. У него есть метод Get (), который принимает необязательные параметры.

public IEnumerable<string> Get(string h, string w = "defaultWorld", int? z=null)
{
    if (z != 0)
        return new string[] { h, w, "this is z: " + z.ToString() };
    else
       return new string[] { h, w };
}

Итак, я проверяю это со следующими URL-адресами

  • /api/bars?h=привет
  • /api/bars?h=hello&w=world
  • /api/bars?h=hello&w=world&z=15

И это работает для всех трех.

Затем я добавляю еще один метод Get (), на этот раз с одним параметром id

 public string Get(int id)
 {
     return "value";
 }

. Я снова проверяю URL-адреса. На этот раз /api/bars?h=hello&w=world и api/bars?h=hello терпят неудачу. Сообщение об ошибке: «На контроллере «Панель» не найдено действие, соответствующее запросу».

По какой-то причине эти два метода плохо сочетаются друг с другом. Если я уберу Get(int id), это сработает. Если я изменю int? z в строку z, тогда это работает (, но тогда требуется преобразование объектов внутри моего метода действия! ).

Почему веб-API делает это? Это ошибка или так задумано?

Большое спасибо.

6
задан John 11 July 2012 в 17:56
поделиться