2010-03-23 4 views
2

J'utilise WCF et REST, et j'ai des types complexes, qui fonctionnent bien. Maintenant, je dois vérifier la validation, je pense utiliser DataAnnotations e.g.Passing Validation exceptions via WCF REST

public class Customer 
{ 
    [Required] 
    public string FirstName {get;set;} 
} 

Maintenant où le problème est de savoir comment transmettre cette validation au service REST?

J'ai aussi besoin de valider l'objet quand il revient, et de lancer une exception, si je dois lancer une exception alors quelle est la meilleure façon de le faire en utilisant REST?

+0

Voulez-vous dire l'API d'annotations de données d'ASP.NET MVC ?? –

Répondre

4

J'utiliseraient le Validation Application Block inclus dans le Microsoft Enterprise Library pour valider les objets de transfert de données utilisé dans l'interface de service. Vous pouvez use attributes to decorate the objects' properties with validation rules, à peu près de la même manière qu'avec le ASP.NET Data Annotations. En cas d'échec de la validation, vous devez renvoyer un code d'erreur HTTP approprié et inclure les détails de ce qui s'est passé dans la réponse HTTP.

est un exemple:

public void PostCustomer(Customer instance) 
{ 
    ValidationResults results = Validation.Validate(instance); 

    if (!results.IsValid) 
    { 
     string[] errors = results 
      .Select(r => r.Message) 
      .ToArray(); 

     WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest; 
     WebOperationContext.Current.OutgoingResponse.StatusDescription = String.Concat(errors); 
    } 

    // Proceed with custom logic 
} 

Si vous utilisez le WCF REST Starter Kit, vous devriez plutôt jeter un WebProtocolException, comme décrit dans this article.

+1

merci, cela confirme ce que j'utilise actuellement :-) – Coppermill

1

Je voudrais examiner dans l'écriture d'une implémentation personnalisée IDispatchMessageInspector où, dans la méthode AfterReceiveRequest, vous appelez manuellement l'architecture de validation. Je ne vais pas entrer dans les détails sur la façon d'appeler l'architecture de validation des annotations de données car je suis sûr que vous pouvez trouver quelque part en ligne si vous ne savez pas déjà comment le faire. Cela dit, une fois que vous avez vos résultats de validation, vous pouvez les énumérer et ensuite, s'il y a des validations échouées, vous pouvez lancer une erreur de validation générique remplie avec les détails de l'implémentation de AfterReceiveRequest.