我有一种情况,我有两种方法,一种在我的控制器类中接受一个 poco 和另一个 poco 列表:
[AcceptVerbs("PUT")]
[ActionName("Item")]
public void SaveItem([FromBody] Item item)
{
m_controller.SaveItem(item);
}
[AcceptVerbs("PUT")]
[ActionName("Items")]
public void SaveItems([FromBody] List<Item> items)
{
m_controller.SaveItem(items);
}
我的路由表看起来像:
routes.MapHttpRoute("Item Route",
"api/item/{orderId}",
new
{
controller = "MyOrder",
action = "Item",
orderId = RouteParameter.Optional
});
routes.MapHttpRoute("Items Route",
"api/items/{orderId}",
new
{
controller = "MyOrder",
action = "Items",
orderId = RouteParameter.Optional
});
这按预期工作。但我想重构代码以尝试重载。我试图重载控制器中的方法并且只有一条路由,但它失败并出现 500 错误 - 无效请求。我认为 webapi 将通过验证参数来解决调用 - 如果它是一个列表,那么它将调用带有列表作为参数的重载方法,否则调用其他方法。我打算做类似的事情:
[AcceptVerbs("PUT")]
[ActionName("Item")]
public void SaveItem([FromBody] Item item)
{
m_controller.SaveItem(item);
}
[AcceptVerbs("PUT")]
[ActionName("Item")]
public void SaveItem([FromBody] List<Item> items)
{
m_controller.SaveItem(items);
}
我的路由表看起来像:
routes.MapHttpRoute("Item Route",
"api/item/{orderId}",
new
{
controller = "MyOrder",
action = "Item",
orderId = RouteParameter.Optional
});