在一个请求中发布或放置多个项目

时间:2015-04-21 02:02:07

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

在一次请求中,一次只能PostPut多个项目吗?

GET  /api/books Get all books.

POST /api/books Create a new book.

PUT /api/books/{id} Update an existing book.

POST /api/books Create books.

PUT /api/books  Update books.

2 个答案:

答案 0 :(得分:2)

我们假设您有一个名为Book的课程,定义为:

public class Book
{
    public string Title { get; set; }

    public string Author { get; set; }
}

现在我们有了一个带POST方法的简单Web.Api控制器:

public class BooksController : ApiController
{
    [HttpPost]
    [Route("books")]
    public HttpResponseMessage PostBooks([FromBody] IEnumerable<Book> books)
    {
        return Request.CreateResponse(HttpStatusCode.Created);
    }
}

该方法对数据没有任何作用,纯粹是为了编译和运行。我的第一个属性表示这是一个POST,第二个属性确定路由,我使用attribute based routing,因为我更喜欢它,但你可以推出自己的路由规则。

现在PostBooks方法接受Ienumerable<Book>类型的参数,而不只是Book类型的单个参数。

当我现在站起来这个小端点时,点击以下网址:

  

http://localhost:port/books

并将请求指定为POST并在请求正文中提供以下有效内容:

[  
   {  
      "Title":"This is a book",
      "Author":"Joe Bloggs"
   },
   {  
      "Title":"This is a book: The reckoning",
      "Author":"Joe Bloggs"
   }
]

我的断点被点击了,当它进入books方法时,Web.API设法将我的有效负载反序列化为PostBooks参数:

booksDeserialized

同样适用于PUT,唯一需要改变的是属性。

答案 1 :(得分:0)

最后我使用下面的代码。

   // Post Multi
    // POST: api/books
    [Route("api/books")]
    [ResponseType(typeof(IEnumerable<Book>))]
    public IHttpActionResult Postbooks(IEnumerable<Book> books)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        foreach (var item in books)
        {
            db.Book.Add(item);
        }

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateException)
        {

            throw;

        }

        return Ok(books);
    }