2014-07-22 1 views
2

J'ai un exemple d'application à Nancy et j'ai un problème avec la validation de la demande. J'utilise FluentValidator avec l'extension BindAndValidate. Ainsi, par exemple, j'ai modèle:Nancy et demande de validation

public class User 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

Et module avec:

Post["/create-user"] = m => this.BindAndValidate<User>()); 

Et il y a problème, si l'application client module d'appel avec des paramètres Nom: "foo, Âge:" une chaîne », alors exception throw Nancy:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: some-string is not a valid value for Int32. ---> System.FormatException: Input string was not in a correct format. 

voici une solution de contournement pour exception par le paramètre ("âge de la propriété était pas correct tapis ")?

Merci

+0

On dirait qu'aujourd'hui c'est bien documenté ici https://github.com/NancyFx/Nancy/wiki/Nancy-and-Validation –

Répondre

-2

Avant de lier pouvez essayer de vérifier si l'âge est int, et si elle est alors à la validation. Quelque chose comme ceci:

int age; 
bool isInt = int.TryParse(Request.Form("Age"), out age); 

if (isInt) 
{ 
    this.BindAndValidate<User>(); 
} 

Espérons que cela aide.

0

Le problème est que la liaison échoue de sorte que le validateur ne s'exécute jamais. Vous pouvez dire à nancy d'ignorer les erreurs de liaison, mais cela ne le fait pas avec élégance (il arrête essentiellement la liaison sur la première erreur). Ainsi, votre étape de validation s'exécute, mais peut se plaindre de propriétés qui étaient correctes, mais qui n'ont tout simplement pas été définies par le classeur.

Vous pouvez contourner ce problème en fournissant votre propre BodyDeserializer qui utilise la gestion des erreurs de Newtonsoft pour que la liaison ne s'arrête pas sur la première erreur trouvée. Voir Handle multiple binding errors from ModelBindingException in NancyFX when binding to JSON in Request.Body