ASP.NET ASP.NET CORE 2.0 中的核心模型绑定错误消息本地化
ASP.NET Core Model Binding Error Messages Localization in ASP.NET CORE 2.0
在 ASP.NET CORE 1.1 中,可以使用资源文件本地化模型绑定错误消息,并配置其选项以在 Startup.cs 中为 ModelBindingMessageProvider 设置消息访问器,例如
services.AddMvc(options =>
{
var F = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
var L = F.Create("ModelBindingMessages", null);
options.ModelBindingMessageProvider.ValueIsInvalidAccessor =
(x) => L["The value '{0}' is invalid."];
如下所示: and here: https://blogs.msdn.microsoft.com/mvpawardprogram/2017/05/09/aspnetcore-mvc-error-message/
在 ASP.NET CORE 2.0 中,我收到有关 ModelBindingMessageProvider 的所有属性的错误消息
options.ModelBindingMessageProvider.ValueIsInvalidAccessor
只读
如何在 ASP.NET CORE 2.0
中本地化这些消息
我也运行喜欢这个。这些设置器已替换为 SetValueIsInvalidAccessor
等方法,此处描述了更改:https://github.com/aspnet/Announcements/issues/240
在 ASP.NET Core 2.0 中,模型绑定消息提供程序属性变为只读,但为每个 属性 添加了一个 setter 方法。
因此,如果您按照我的 的示例设置 ValueIsInvalidAccessor
,您应该这样使用 SetValueIsInvalidAccessor
方法:
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor (
(x) => L["The value '{0}' is invalid."]);
示例项目
我在以下存储库中添加了 ASP.NET CORE 2.0 的示例项目:
默认错误消息:
- MissingBindRequiredValueAccessor: 未提供“{0}”的值 属性。
- MissingKeyOrValueAccessor: 需要一个值。
- MissingRequestBodyRequiredValueAccessor: 需要一个非空的请求体。
- ValueMustNotBeNullAccessor: 值“{0}”无效。
- AttemptedValueIsInvalidAccessor: 值“{0}”对 {1} 无效。
- NonPropertyAttemptedValueIsInvalidAccessor: 值“{0}”无效。
- UnknownValueIsInvalidAccessor: 提供的值对 {0} 无效。
- NonPropertyUnknownValueIsInvalidAccessor: 提供的值无效。
- ValueIsInvalidAccessor: 值“{0}”无效。
- ValueMustBeANumberAccessor: 字段 {0} 必须是数字。
- NonPropertyValueMustBeANumberAccessor: 字段必须是数字。
您可以使用此配置来本地化 mvc 核心错误消息:
public class SomeMvcOptionsSetup : Microsoft.Extensions.Options.IConfigureOptions<Microsoft.AspNetCore.Mvc.MvcOptions>
{
private readonly Microsoft.Extensions.Localization.IStringLocalizer _resourceLocalizer;
public SomeMvcOptionsSetup()
{
}
public SomeMvcOptionsSetup(Microsoft.Extensions.Localization.IStringLocalizerFactory stringLocalizerFactory)
{
_resourceLocalizer = stringLocalizerFactory.Create(baseName:"ResourceClassName",location:"ResourceNameSpace");
}
public void Configure(Microsoft.AspNetCore.Mvc.MvcOptions options)
{
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor((x) =>
{
if (_resourceLocalizer == null)
{
return "Custom Error Message";
}
return _resourceLocalizer["Specific Resource Key In Resource File"];
});
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor((x) =>
{
if (_resourceLocalizer == null)
{
return "Value Can not be null....";
}
return _resourceLocalizer["ResourceKeyValueCanNotBeNull"];
});
.
.
.
}
}
然后,将以下内容添加到您的 Startup.ConfigureServices(...) 方法中:
services.TryAddEnumerable(
ServiceDescriptor.Transient<IConfigureOptions<MvcOptions>,SomeMvcOptionsSetup >());
请看这个link
在 ASP.NET CORE 1.1 中,可以使用资源文件本地化模型绑定错误消息,并配置其选项以在 Startup.cs 中为 ModelBindingMessageProvider 设置消息访问器,例如
services.AddMvc(options =>
{
var F = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
var L = F.Create("ModelBindingMessages", null);
options.ModelBindingMessageProvider.ValueIsInvalidAccessor =
(x) => L["The value '{0}' is invalid."];
如下所示:
在 ASP.NET CORE 2.0 中,我收到有关 ModelBindingMessageProvider 的所有属性的错误消息
options.ModelBindingMessageProvider.ValueIsInvalidAccessor
只读
如何在 ASP.NET CORE 2.0
中本地化这些消息我也运行喜欢这个。这些设置器已替换为 SetValueIsInvalidAccessor
等方法,此处描述了更改:https://github.com/aspnet/Announcements/issues/240
在 ASP.NET Core 2.0 中,模型绑定消息提供程序属性变为只读,但为每个 属性 添加了一个 setter 方法。
因此,如果您按照我的 ValueIsInvalidAccessor
,您应该这样使用 SetValueIsInvalidAccessor
方法:
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor (
(x) => L["The value '{0}' is invalid."]);
示例项目
我在以下存储库中添加了 ASP.NET CORE 2.0 的示例项目:
默认错误消息:
- MissingBindRequiredValueAccessor: 未提供“{0}”的值 属性。
- MissingKeyOrValueAccessor: 需要一个值。
- MissingRequestBodyRequiredValueAccessor: 需要一个非空的请求体。
- ValueMustNotBeNullAccessor: 值“{0}”无效。
- AttemptedValueIsInvalidAccessor: 值“{0}”对 {1} 无效。
- NonPropertyAttemptedValueIsInvalidAccessor: 值“{0}”无效。
- UnknownValueIsInvalidAccessor: 提供的值对 {0} 无效。
- NonPropertyUnknownValueIsInvalidAccessor: 提供的值无效。
- ValueIsInvalidAccessor: 值“{0}”无效。
- ValueMustBeANumberAccessor: 字段 {0} 必须是数字。
- NonPropertyValueMustBeANumberAccessor: 字段必须是数字。
您可以使用此配置来本地化 mvc 核心错误消息:
public class SomeMvcOptionsSetup : Microsoft.Extensions.Options.IConfigureOptions<Microsoft.AspNetCore.Mvc.MvcOptions>
{
private readonly Microsoft.Extensions.Localization.IStringLocalizer _resourceLocalizer;
public SomeMvcOptionsSetup()
{
}
public SomeMvcOptionsSetup(Microsoft.Extensions.Localization.IStringLocalizerFactory stringLocalizerFactory)
{
_resourceLocalizer = stringLocalizerFactory.Create(baseName:"ResourceClassName",location:"ResourceNameSpace");
}
public void Configure(Microsoft.AspNetCore.Mvc.MvcOptions options)
{
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor((x) =>
{
if (_resourceLocalizer == null)
{
return "Custom Error Message";
}
return _resourceLocalizer["Specific Resource Key In Resource File"];
});
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor((x) =>
{
if (_resourceLocalizer == null)
{
return "Value Can not be null....";
}
return _resourceLocalizer["ResourceKeyValueCanNotBeNull"];
});
.
.
.
}
}
然后,将以下内容添加到您的 Startup.ConfigureServices(...) 方法中:
services.TryAddEnumerable(
ServiceDescriptor.Transient<IConfigureOptions<MvcOptions>,SomeMvcOptionsSetup >());
请看这个link