Asp.NET Core DataAnotationLocalization没有从正确的语言返回验证结果

时间:2016-03-21 11:37:25

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我正在创建我的第一个asp.net核心应用程序,我正在尝试创建modelstate localizaed验证消息。

到目前为止已经完成了。在我的Startup课程中,我有以下内容:

     public void ConfigureServices(IServiceCollection services)
    {
       //Omitted code because is not relevant to curent problem 

       var mvc = services.AddMvc(config => {
            config.Filters.Add(new ExceptionHandler(env));
            config.Filters.Add(new LanguageActionFilter());
        });

        mvc.AddViewLocalization();

        mvc.AddDataAnnotationsLocalization();

    }

  public void Configure(IApplicationBuilder app)
    {
       //Omitted code because is not relevant to curent problem 

        UseLocalization(app);

        UseMvcConfig(app);
    }

    private void UseLocalization(IApplicationBuilder app)
    {
        var defaultCulture = new RequestCulture(new CultureInfo("ro-RO"));

        var requestLocalizationOptions = new RequestLocalizationOptions
        {
            SupportedCultures = new List<CultureInfo>
            {
                new CultureInfo("en-US"),
                new CultureInfo("ro-RO")
            },
            SupportedUICultures = new List<CultureInfo>
            {
                new CultureInfo("en-US"),
                new CultureInfo("ro-RO")
            }
        };

        app.UseRequestLocalization(requestLocalizationOptions, defaultCulture);
    }

    private void UseMvcConfig(IApplicationBuilder app)
    {
        app.UseMvc(config =>
        {
            config.MapRoute(
                name: "Default",
                template: "api/{controller}/{action}/{id?}");
        });
    }

我正在调用以下控制器:

    [AllowAnonymous]
    public class AccountController : Controller
    {
        private readonly IMapperService mapperService;
        private readonly IAuthenticationManager autheticationManager;
        private readonly IUserManager userManager;

        public AccountController(IUserManager userManager, IAuthenticationManager autheticationManager, IMapperService mapperService)
        {
            this.userManager = userManager;
            this.mapperService = mapperService;
            this.autheticationManager = autheticationManager;
        }

        [HttpPost]
        [ModelStateValidation]
        public async Task<IActionResult> Register([FromBody]UserRegistrationViewModel userViewModel)
        {
            UserDTO userDTO = mapperService.Map<UserRegistrationViewModel, UserDTO>(userViewModel);
            IdentityResult registrationResult = await userManager.RegisterAsync(userDTO, Request.Host.Value);

            if (!registrationResult.Succeeded) {
                return HttpBadRequest();
            }

            return Ok();
        }
    }
}

我的UserRegistrationViewModel看起来像这样:

    [Mapper(MapTo = typeof(UserDTO))]
public class UserRegistrationViewModel
{
    [Required(ErrorMessageResourceName = "Account_Register_EmailAddress", ErrorMessageResourceType = typeof(Resource))]
    public string UserName { get; set; }

    [Required(ErrorMessageResourceName = "Account_Register_Password", ErrorMessageResourceType = typeof(Resource))]
    public string Password { get; set; }

    [Required(ErrorMessageResourceName = "Account_Register_Password_Confirmation", ErrorMessageResourceType = typeof(Resource))]
    [Compare("Password", ErrorMessageResourceName = "Account_Register_Password_Compared", ErrorMessageResourceType = typeof(Resource))]
    public string ConfirmPassword { get; set; }
}

我还创建了两个资源文件。一个叫做Resource.resx,另一个叫Resource.ro-RO.resx。

现在当从客户端执行ajax调用时,我将设置以下内容 aditional header:

'Accept-Language': 'ro-RO'

我的问题是,不是从Resource.ro-RO.resx返回数据,而是返回Resource.resx中的数据。

我还检查了当前的CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture是什么,它们都被设置为&#39; ro-RO&#39;。

我错过了什么?

0 个答案:

没有答案