【问题标题】:How to set null the error message with Fluent Validation如何使用 Fluent Validation 将错误消息设置为 null
【发布时间】:2019-05-12 19:45:31
【问题描述】:

我正在使用这个 Lib 来验证我的模型,但如果未正确分配模式,它会返回错误消息,我只想检索 StatusCode 但没有消息。

RuleFor(x => x.Email).NotEmpty().EmailAddress().WithMessage("");

如果我在 .WithMessage 方法中输入 null 或 "",我会得到一个异常!

【问题讨论】:

  • “检索状态码”是什么意思?您是在谈论检索验证失败的状态代码,还是从 API 向客户端返回特定的 HTTP 状态代码,而不用返回 JSON 中的错误列表?
  • 我只想验证字段而不返回任何错误消息,只返回状态码。如果任何一个属性是错误的,只返回一个状态码而不是错误消息!
  • 状态码是什么意思?表示验证失败的 http 状态码?

标签: c# asp.net-core-webapi fluentvalidation


【解决方案1】:

我在 Fluent Validation 中没有找到任何解决方案。也许您可以清除 ModelState 中的错误消息?

【讨论】:

  • 现在这更像是一条评论。您能否进一步扩展您的答案?
【解决方案2】:

您无法将其设置为 null 或空。如果您不设置消息,则会收到 A message must be specified when calling WithMessage 错误。

如果未正确分配模式,它会返回错误消息,我只想检索 StatusCode 但没有消息。

当您检索状态码时,错误没有影响。如果我使用

.WithMessage(model => $"");

结果是{"errors":{"EmailAddress":["The input was not valid."]}

为避免异常,走一走是使用下面的代码(带空格)

.WithMessage(" ");

并得到结果{"errors":{"EmailAddress":[" "]}

【讨论】:

  • 有什么办法可以隐藏属性名吗?
  • @Nathiel Paulino 我不认为你可以这样做,但你可以使用RuleFor(m => m.Email).NotEmpty().EmailAddress().OverridePropertyName($"")覆盖它
【解决方案3】:

在我看来,如果你想返回一个空错误,那么你的架构就有问题。

但是,您可以这样做:

RuleFor(x => x.Email).NotEmpty().EmailAddress().WithMessage((_) => "");

如果您事先不知道错误消息应该是什么,这样的设计会很有用。像这样:

string error = string.Empty;
RuleFor(x => x.SomeProperty)
    .Must(x =>
    {
        if (someСondition)
        {
            error = "error message 1";
            return false;
        }
        if (anotherСondition)
        {
            error = $"error message 2: {x.ToString()}";
            return false;
        }
        return true;
    })
    .WithMessage((_) =>
    {
        return error;
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2012-08-24
    • 2011-11-22
    相关资源
    最近更新 更多