2013-10-17 1 views
3

j'ai un filtre qui définit le CurrentUICulture du fil courant à une valeur tirée d'un cookieGet Filtre à exécuter avant la validation du modèle

et moi avons un modèle qui est en cours de validation à l'aide de la bibliothèque 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); 

Je veux la culture de fil à modifier par ce point il tire la langue correcte pour le message d'erreur

Si je mets un point d'arrêt sur le validateur ci-dessus, je peux voir le fil a la culture mal.

Si je lance le code supplémentaire, il frappe alors un point de rupture sur le filtre qui change la culture du fil

Comment puis-je faire fonctionner le code de filtre avant que les coups de pied de validation du modèle dans

I ont essayé à la fois de décorer la méthode d'action du contrôleur avec l'attribut filter et de l'appliquer globalement

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

c'est api web, pas Mvc, bien que les concepts sont les mêmes

des idées?

Répondre

5

Comment puis-je faire le code de filtre courir avant les coups de pied de validation du modèle dans

Je pense que cela est impossible. La liaison de modèle se produit avant l'exécution des filtres d'action dans le pipeline. Le pipeline ASP.NET Web API est quelque chose qui peut être étendu mais pas modifié. Vous pouvez contourner cette situation en utilisant autre chose qu'un filtre pour définir la culture, par exemple un gestionnaire de messages. Les filtres d'autorisation s'exécutent également avant la liaison du modèle, mais un filtre d'autorisation est pour l'autorisation et probablement pas un bon ajustement pour cela.

+0

Le gestionnaire de messages fonctionne -thanks – ChrisCa

+2

Y a-t-il des problèmes majeurs sur l'utilisation du filtre d'autorisation pour gérer cela ou est-ce simplement une mauvaise pratique? – user441365

+0

La liaison de modèle se produit avant les filtres d'action, mais cela ne signifie pas que la validation doit également avoir lieu avant. C'est une erreur de conception, cela n'a pas de sens de forcer la validation à précéder les filtres d'action. En fait, le filtre peut révoquer la requête du client, donc la validation dans ce cas ne serait même pas nécessaire (surcharge inutile en raison de la façon dont ils l'ont construit). – Alisson

Questions connexes