我正在使用ASP.NET Core 1.1 MVC来构建JSON API.给出以下模型和动作方法:
public class TestModel
{
public int Id { get; set; }
[Range(100, 999)]
public int RootId { get; set; }
[Required, MaxLength(200)]
public string Name { get; set; }
public string Description { get; set; }
}
[HttpPost("/test/{rootId}/echo/{id}")]
public IActionResult TestEcho([FromBody] TestModel data)
{
return Json(new
{
data.Id,
data.RootId,
data.Name,
data.Description,
Errors = ModelState.IsValid ? null : ModelState.SelectMany(x => x.Value.Errors)
});
}
Run Code Online (Sandbox Code Playgroud)
在[FromBody]我的动作方法的参数导致必须从发布到端点JSON有效载荷的约束的模型,然而,它也可以防止Id和RootId属性经由路由参数的约束.
我可以将其分解为单独的模型,一个绑定路由,一个绑定到正文,或者我也可以强制任何客户端发送id&rootId作为有效负载的一部分,但这两个解决方案似乎比我更复杂.我喜欢并且不允许我将验证逻辑保存在一个地方.有没有办法让这种情况适用于模型可以正确绑定的地方,我可以将我的模型和验证逻辑保持在一起?