6

我有一个过滤器,将当前线程的 CurrentUICulture 设置为从 cookie 中提取的值

我有一个正在使用 FluentValidation 库进行验证的模型

[Validator(typeof(MyInputModelValidator))]
public class MyInputModel


public class MyInputModelValidator: AbstractValidator<MyInputModel>
    {
        public MyInputModelValidator()
        {
            var x = Thread.CurrentThread.CurrentUICulture.Name;
            RuleFor(o => o.Country).NotEmpty().WithMessage(Resources.NoCountryError);

我希望此时更改线程文化,以便为错误消息提取正确的语言

如果我在上面的验证器上放一个断点,我可以看到线程的文化错误。

如果我进一步运行代码,它会在过滤器上遇到一个断点,从而改变线程的文化

如何在模型验证开始之前使过滤器代码运行

我已经尝试使用 filter 属性装饰控制器操作方法并在全局范围内应用它,例如

GlobalConfiguration.Configuration.Filters.Add(new LocalizationApiFilter());

这是 web api,而不是 mvc,虽然概念是一样的

有任何想法吗?

4

1 回答 1

7

如何在模型验证开始之前使过滤器代码运行

我认为这是不可能的。模型绑定发生在操作过滤器在管道中运行之前。ASP.NET Web API 管道是可以扩展但不能修改的东西。您可以通过使用过滤器以外的东西来设置文化,比如消息处理程序来解决这种情况。授权过滤器也在模型绑定之前运行,但授权过滤器用于授权,可能不适合此。

于 2013-10-17T20:52:59.980 回答