首页 > 解决方案 > Asp.net core web api Localization DataAnnotation 自定义属性

问题描述

我正在尝试对资源文件使用本地化,但它不起作用,仅用于自定义必需属性

public class RequiredIntAttribute : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        bool isValid = base.IsValid(value);

        if (isValid)
        {
            isValid =  int.Parse(value.ToString()) != 0;
        }

        return isValid;
    }
}

public class SalonForInsertDto
{

    public string Name { get; set; }
    public string NameEn { get; set; }

    [RequiredInt(ErrorMessage = "the userId is required")]
    public int UserId { get; set; }
}

标签: asp.net-web-apiasp.net-core-localization

解决方案


在您的配置方法中添加:

//localization & globalization
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);

然后在您的自定义验证器类中添加:

var _localizationService = (IStringLocalizer<SalonForInsertDto>)validationContext.GetService(typeof(IStringLocalizer<SalonForInsertDto>));

然后您现在可以从资源文件中获取本地化的字符串值,例如:

_localizationService["How are you?"]

您可以阅读有关 IStringLocalizer 对象的信息,它正在官方文档中工作。


推荐阅读