【问题标题】:asp.net core attribute adapter overwrites the server error messageasp.net core 属性适配器覆盖服务器错误信息
【发布时间】:2021-09-11 12:55:15
【问题描述】:

我有一个自定义属性,它根据某些条件显示一条消息,其中包含从类中获取的动态值(例如:对于“{1}”,该值必须小于“{0}”。)。而且我还想在客户端上进行验证,所以我创建了一个属性适配器,但是因为可以更改值,所以我使用了一些替换器,例如“__val1__”和“__val2__”,客户端将用正确的值替换这些值。

现在我发现,如果客户端未通过验证并且服务器上的验证失败,而不是“对于 'XXX',该值必须小于 'YYY'”。我收到消息“对于'__val1__',值必须小于'__val2__'。”这是我为客户端验证放置的消息,但似乎服务器错误也更改为这个。

有没有办法告诉 asp.net core 适配器不应该覆盖服务器错误信息?

【问题讨论】:

  • 是否要在客户端自定义模型验证?如果是这样,而你只是想在客户端更改错误信息,请参考官方文档:docs.microsoft.com/en-us/aspnet/core/mvc/models/…
  • 以它为例,只是我的消息有两个参数取自我放置属性的同一类。而且我需要同时进行客户端和服务器验证

标签: asp.net-core model-binding


【解决方案1】:

经过一些调试,我发现当为服务器验证执行适配器时,上下文的类型是 ModelValidationContext

public override string GetErrorMessage(ModelValidationContextBase validationContext)
  {
     var modelContext = validationContext as ModelValidationContext;

     if (modelContext == null)
     {
        return GetErrorMessage(validationContext.ModelMetadata, "__val1__", "__val2__");
     }
     else
     {
        var model = modelContext.Container as <Class>;
        var val1 = //get the real value from the model;
        var val2 = //get the real value from the model
        return GetErrorMessage(validationContext.ModelMetadata, val1, val2);
     }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2020-09-26
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2013-11-29
    相关资源
    最近更新 更多