为了避免使用Tuple<;和>;,并减少传递输入模型时使用的类型数量和可选的验证错误,我将来自FluentValidation的列表作为属性包含在输入模型中.
当使用Razor模板呈现响应时,验证失败用于向表单添加错误类和显式错误.
处理POST请求失败,因为处理程序try 将属性与发布的数据中的列表绑定.
有没有办法从表单绑定中排除该属性?
通常的属性[BindNever]和[JsonIgnore]在这种情况下不起作用.
示例代码:
输入模型:
public class CreateToDoModel
{
// Should be bound
public string Description { get; set; }
// Should be bound
public string Due { get; set; }
// Should NOT be bound
public List<FluentValidation.Results.ValidationFailure>? Errors { get; set; }
}
处理程序:
app.MapPost($"/todos", async (IMediator mediator, [FromForm] CreateToDoModel model, IValidator<CreateToDoModel> validator, IHttpContextAccessor context) =>
{
model.Errors = (await validator.ValidateAsync(model)).Errors;
// Any validation errors? If so, re-render the view.
if (model.Errors.Count !=0 ) return Results.Extensions.RazorSlice($"{TemplatePath}Create.cshtml", model);
// Validation ok - send command
var result = await mediator.Send(new CreateToDoCommand { Description = model.Description, Due = DateOnly.Parse(model.Due) });
// (Error handling excluded)
}