我有一个过滤器,它将当前线程的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,虽然概念是相同的
任何想法?
答案 0 :(得分:5)
如何在模型验证开始之前运行过滤器代码
我认为这是不可能的。模型绑定在动作过滤器在管道中运行之前发生。 ASP.NET Web API管道可以扩展但不能修改。您可以通过使用除筛选器之外的其他内容来设置文化,例如消息处理程序,从而解决此问题。授权过滤器也在模型绑定之前运行,但授权过滤器用于授权,可能不适合此。