ОБНОВЛЕНИЕ
Мое первоначальное предположение заключалось в том, что причиной проблемы были необязательные параметры. Это кажется неправильным. Вместо этого возникает проблема с несколькими методами действий, когда один из этих методов содержит типы значений, допускающие значение 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-адресами
И это работает для всех трех.
Затем я добавляю еще один метод 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 делает это? Это ошибка или так задумано?
Большое спасибо.