ASP.Net Core-如何使用自定义'ModelBindingMessageProvider'

时间:2019-03-07 08:15:07

标签: asp.net-core dependency-injection .net-core localization startup

我有一个使用剃须刀的简单ASP.Net Core应用程序。用户表单由模型和数据注释属性生成。输入值错误的错误消息默认为英语。我知道我可以在“ ModelBindingMessageProvider ”的帮助下转换默认消息。

在下面,您可以通过更新“ DefaultModelBindingMessageProvider ”来找到一种可行的方法(在Startup.cs中):

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(o =>
    {
        // see: https://stackoverflow.com/questions/40828570/asp-net-core-model-binding-error-messages-localization
        o.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(u => "My custom validation error message");
    });
}

我希望不要直接在startup.cs中配置转换。一种方法是使用自定义类,该类继承自“ ModelBindingMessageProvider”。

public class MyModelBindingMessageProvider : ModelBindingMessageProvider
{
    public override Func<string, string> ValueMustNotBeNullAccessor => o => "My custom validation error message";
}

这是我的问题:

  1. 在哪里注册我自己的课程?
  2. 这是个好方法吗?什么是最佳实践atm。

(真正的应用程序当然会使用字符串资源)

1 个答案:

答案 0 :(得分:0)

不幸的是,似乎无法在ASP.NET Core 3.1中提供ModelBindingMessageProvider的自定义实现。

MvcOptions的{​​{3}}将ModelBindingMessageProvider属性设置为DefaultModelBindingMessageProvider的实例。

ModelBindingMessageProvider = new DefaultModelBindingMessageProvider();

constructor本身没有设置器,也不属于ModelBindingMessageProvider类型。

public DefaultModelBindingMessageProvider ModelBindingMessageProvider { get; }

tl; dr 即使在这里拥有自己的实现选项很有意义,您也必须在Startup类中配置消息。