更新
我最初的假设是可选参数是问题的原因。这似乎是不正确的。相反,当其中一个方法包含某些参数的可空值类型(例如 int? )时,这似乎是多个操作方法的问题。
我正在使用 Visual Studio 2012 RC,并且刚刚开始使用 Web API。我遇到了一个问题并收到错误消息“在与请求匹配的控制器 'Bars' 上未找到任何操作。”
我有一个酒吧控制器。它有一个接收可选参数的 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 };
}
因此,我使用以下网址对其进行了测试
- /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";
}
我再次测试网址。这次 /api/bars?h=hello&w=world 和 api/bars?h=hello 失败了。错误消息是“未在与请求匹配的控制器 'Bar' 上找到任何操作。”
出于某种原因,这两种方法不能很好地结合在一起。如果我删除Get(int id)
,它的工作原理。如果我改变int?z 到字符串 z,然后它可以工作(但是它需要在我的操作方法中转换对象!)。
为什么 Web API 会这样做?这是一个错误还是设计使然?
非常感谢。