我有两个项目,一个是SPA,另一个是ASP.NET aspx项目。 通常这两个项目通过Web API相互通信。
有一个像这样的运行方法(从SPA到ASP.NET)
[HttpPost]
[Route("DenyInvoice/{approvalId:long}")]
public IHttpActionResult DenyInvoice(long approvalId)
{
string exMsg = "";
if (DenyInvoice(approvalId, this.UserId, this.Email, out exMsg))
return Ok();
return BadRequest(exMsg);
}
这个方法可以正常工作,但我想编写一个接受DTO变量的方法,如;
[HttpPost]
[Route("InvoiceDetailUpdate/{invoices : invoiceDetailDtoModel}")]
public IHttpActionResult InvoiceDetailUpdate(invoices : invoiceDetailDtoModel)
{
....
}
有可能吗?我该怎么做?
你能帮忙吗? 谢谢..答案 0 :(得分:0)
您希望通过post检索参数,因此get参数路由不需要。
[HttpPost]
[Route("InvoiceDetailUpdate")]
public IHttpActionResult InvoiceDetailUpdate(InvoiceDetailDtoModel invoices)
{
....
}
另外,请注意类的名称约定。
答案 1 :(得分:0)
使用[FromBody]
传递POST参数。有关详细信息,请参阅https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api#implement-the-other-crud-operations。
[HttpPost]
[Route("InvoiceDetailUpdate")]
public IHttpActionResult InvoiceDetailUpdate([FromBody]InvoiceDetailDtoModel invoices)
{
....
}
答案 2 :(得分:0)
在以下代码中,您可以像这样使用:
public class BooksController : ApiController
{
[Route("api/books")]
public IEnumerable<Book> GetBooks() { ... }
[Route("api/books/{id:int}")]
public Book GetBook(int id) { ... }
[Route("api/books")]
[HttpPost]
public HttpResponseMessage CreateBook(Book book) { ... }
}
现在,您可以看到此链接attribute-routing-in-web-api-2 并将您的代码更改为上图
[Route("api/YourController/InvoiceDetails")]
public IHttpActionResult InvoiceDetailUpdate(InvoiceDetails invoiceDetailsDto)