如何在具有不同参数的同一控制器中进行少量PUT操作

时间:2013-12-18 12:46:37

标签: asp.net-mvc asp.net-web-api

我有下一个代码:

public class TodoController : ApiController
{
    //...

    public void Put([FromBody] Todo todo)
    {
        //Some update operation for singe todo
    }

    public void Put([FromBody] IEnumerable<Todo> todo)
    {
        //Some update operation for few todo
    }

}

public class Todo
{

    public Int32 Id { get; set; }

    public String Title { get; set; }

    public Boolean Completed { get; set; }
}

我想做几个PUT操作: 1)更新单个条目 2)一次更新条目数组

但是当我向TodoController发出API的HttpPut请求时,它会向我显示消息:

{"Message":"An error has occurred.","ExceptionMessage":"Multiple actions were found that match the request: \r\nVoid Put(Todo) on type TodoController\r\nVoid Put(System.Collections.Generic.IEnumerable`1[Todo]) on type TodoController","ExceptionType":"System.InvalidOperationException"...

任何想法如何解决?任何进步都有很多。

1 个答案:

答案 0 :(得分:0)

为了做到这一点,您将不得不为每个方法定义单独的路由。管理这个的一个好方法是使用Attribute routing nuget包。它使您的路由设置变得更加容易,甚至可以作为WebApi 2的一部分。可以找到它的文档here

以下是一个例子:

//define first route
[PUT("PutMethod1")]
public void Put([FromBody] Todo todo)
{
    //Some update operation for singe todo
}

//define second route
[PUT("PutMethod2")]
public void Put([FromBody] IEnumerable<Todo> todo)
{
    //Some update operation for few todo
}