相关疑难解决方法(0)

ASP.NET核心MVC混合路由/ FromBody模型绑定和验证

我正在使用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有效载荷的约束的模型,然而,它也可以防止IdRootId属性经由路由参数的约束.

我可以将其分解为单独的模型,一个绑定路由,一个绑定到正文,或者我也可以强制任何客户端发送id&rootId作为有效负载的一部分,但这两个解决方案似乎比我更复杂.我喜欢并且不允许我将验证逻辑保存在一个地方.有没有办法让这种情况适用于模型可以正确绑定的地方,我可以将我的模型和验证逻辑保持在一起?

c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core

16
推荐指数
3
解决办法
1万
查看次数