我正在尝试使用来自请求绑定的所有相关数据创建一个对象。
想象一个这样的动作
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
模型可能是这样的
public class PostRequest
{
[FromRoute]
public int Id { get; set; }
[FromHeader]
public string SomeHeader { get; set; }
[FromBody]
public int Foo { get; set; }
[FromBody]
public string Bar { get; set; }
[FromBody]
public string Baz { get; set; }
}
不幸的是,不允许使用多个[FromBody]
。
如果它被允许并按预期工作,我可以像这样实现一个通用的 CRUD 控制器
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
{
var command = _mapper.Map<TCommand>(model); // AutoMapper
await _mediator.Send(command); // MediatR
// omitted for brevity
return Created();
}
显然,它看起来不会完全那样。
这个想法是从控制器中删除所有与 API/MVC 无关的逻辑。 所以控制器所做的就是
现在我可以有一个实现来满足我所有的 CRUD 控制器需求 - 并且非常高兴!
它不需要是[FromBody]
它可以是另一个属性。 像[FromBodyPart]
, [BindFromBody]
或完全不同的东西。
那可行吗?
感谢您的功能请求。 我们将在下一个发布计划期间考虑此功能,并相应地更新此问题的状态。
我认为这将是我在这里仍然没有回答的 SO 问题的解决方案:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property
谢谢您联络我们。
在重新评估这个问题后,我们决定不提供这样的功能,因为这与我们在框架中尝试遵循的原则不一致。
最有用的评论
感谢您的功能请求。 我们将在下一个发布计划期间考虑此功能,并相应地更新此问题的状态。