.NET CORE API:是否可以根据用于提交模型的http谓词有条件地验证模型?

时间:2019-05-31 00:05:50

标签: fluentvalidation

我是FluentValidation的新手,我想以不同的方式验证模型,具体取决于用来提交模型的动词。

给出一个非常简单的类,我想忽略ID上的POST属性,但要确保它已在PUT上提供。这是FluentValidation可以做的吗?

 public class CategoryModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

我猜我必须将HttpContext传递给验证器,以便我可以确定所使用的http方法,但是如果已有内置方法,我不想重新发明轮子

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为我已经通过将上下文传递给我的验证器来提出了一个解决方案。但是,如果出现问题或不正确的地方,请告诉我。

public class CategoryModel
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }


public class CategoryModelValidator : AbstractValidator<CategoryModel>
    {
        public CategoryModelValidator(IHttpContextAccessor context)
        {
            if (context.HttpContext.Request.Method == HttpMethods.Post)
                RuleFor(x => x.ID).Empty();

            if (context.HttpContext.Request.Method == HttpMethods.Put)
                RuleFor(x => x.ID).NotEmpty();

            RuleFor(x => x.Name).Length(1, 30);
        }
    }

传递上下文比我想象的要容易。我要做的就是用ConfigureServices在我的services.AddHttpContextAccessor()方法中注册它,然后DI负责其余的工作。

说实话,这是一个非常方便的验证工具