首页 > 解决方案 > ASP.NET CORE 2.1 FromRoute 和 FromBody 模型绑定

问题描述

我阅读了 Microsoft 关于构建 Web API的文档,但除了开发自定义模型绑定器之外,我没有看到有关如何合并路由和正文参数的示例。我相信我遗漏了一些东西,因为开发自定义模型绑定器似乎对于这项常见任务来说太过分了。如何告诉我的应用程序从路由参数和正文有效负载创建模型?

Request:
PUT /business/f8e5cf33-40b1-4b8e-8280-b1b60a459154
{"name": "MyBusiness", "street": "123 Main Street"}

Response:
400
{"Id": ["'Id' must not be empty."]}

// BusinessController
[Route("business/{id}")]
[ApiController]
public class BusinessController : Controller {
    [HttpPut]
    [ProducesResponseType(400)]
    public ActionResult PutAsync(BusinessModel business) {
      ...
    }
}

// BusinessModel
class BusinessModel {
    // The `[FromRoute]` annotation has no affect
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Street { get; set; }
}

标签: asp.netasp.net-web-apimodel-binding

解决方案


您可以在参数部分分隔两个标签。

   // BusinessController
    [Route("business/{id}")]
    [ApiController]
    public class BusinessController : Controller {
        [HttpPut]
        [ProducesResponseType(400)]
        public ActionResult PutAsync([FromBody]BusinessModel business, [FromRoute] int id) {
          ...
        }
    }

然后将该 id 分配给模型,如果它是模型的一部分。


推荐阅读