字符串值不匹配的ASP.NET Core FluentValidation IsInEnum()

时间:2018-07-17 13:20:47

标签: asp.net-core asp.net-core-webapi fluentvalidation asp.net-core-2.1

我正在尝试在ASP.NET Core WebAPI中添加FluentValidation进行模型验证,并且具有以下enum

public enum Foo
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 3
}

我的模特:

public class MyModel
{
    public Foo MyEnum { get; set; }
}

我的FluentValidation规则:

public class MyModelValidator : AbstractValidator<MyModel>
    {
        public MyModelValidator ()
        {
            RuleFor(m => m.MyEnum ).IsInEnum().WithMessage("MyEnum should be Value1, Value2, or Value3.");
        }
    }

我的ActionFilter:

 public class ValidatorActionFilter : Attribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!filterContext.ModelState.IsValid)
            {
                filterContext.Result = new BadRequestObjectResult(filterContext.ModelState);
            }
        }
    }

最后是我的ASP.NET Core WebAPI ActionMethod:

[HttpPost]
[ValidatorActionFilter]
public IActionResult SomeAction([FromBody]MyModel request)
{
    //implementation
    return Ok("success");
}

当我使用123"Value1""Value2""Value3"发布到动作方法时,验证通过当这些值与枚举Foo匹配时,将调用action方法。当我使用integer12以外的3值发布时,我收到错误消息MyEnum should be Value1, Value2, or Value3.,该错误消息是在MyModelValidator中配置的

当我发布string"Value1""Value2"以外的"Value3"值时,我一直收到错误消息The input was not valid.,而不是在其中配置的错误消息MyModelValidator。如何使用验证器规则中配置的消息更改此消息?无论如何,有没有修改此消息?想知道此消息来自何处。

0 个答案:

没有答案