Post 或将多个项目放在一个请求中
Post or Put multiple items in a single request
是否可以在单个请求中一次 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.
假设您有一个名为 Book
的 class,定义为:
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
.
的单个参数
当我现在站起来这个小端点,用下面的url打它:
并将请求指定为 POST
并在请求正文中提供以下有效负载:
[
{
"Title":"This is a book",
"Author":"Joe Bloggs"
},
{
"Title":"This is a book: The reckoning",
"Author":"Joe Bloggs"
}
]
我的断点被击中,Web.API 设法将我的负载反序列化为 books
参数,当它进入 PostBooks
方法时:
同样适用于PUT
,唯一需要改变的是属性。
最后我使用了如下代码。
// 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);
}
是否可以在单个请求中一次 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.
假设您有一个名为 Book
的 class,定义为:
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
.
当我现在站起来这个小端点,用下面的url打它:
并将请求指定为 POST
并在请求正文中提供以下有效负载:
[
{
"Title":"This is a book",
"Author":"Joe Bloggs"
},
{
"Title":"This is a book: The reckoning",
"Author":"Joe Bloggs"
}
]
我的断点被击中,Web.API 设法将我的负载反序列化为 books
参数,当它进入 PostBooks
方法时:
同样适用于PUT
,唯一需要改变的是属性。
最后我使用了如下代码。
// 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);
}