在一次请求中,一次只能Post
或Put
多个项目吗?
这
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.
答案 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
类型的单个参数。
当我现在站起来这个小端点时,点击以下网址:
并将请求指定为POST
并在请求正文中提供以下有效内容:
[
{
"Title":"This is a book",
"Author":"Joe Bloggs"
},
{
"Title":"This is a book: The reckoning",
"Author":"Joe Bloggs"
}
]
我的断点被点击了,当它进入books
方法时,Web.API设法将我的有效负载反序列化为PostBooks
参数:
同样适用于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);
}