92 votes

Comment puis-je renvoyer un code d'état HTTP personnalisé à partir d'une méthode WCF REST?

Si quelque chose ne va pas dans un appel WCF REST, tel que la ressource demandée est introuvable, comment puis-je jouer avec le code de réponse HTTP (en le fixant à quelque chose comme HTTP 404, par exemple) dans ma méthode OperationContract?

121voto

spoon16 Points 17694

Il y a un WebOperationContext que vous pouvez accéder et il a un OutgoingResponse de la propriété de type OutgoingWebResponseContext qui a StatusCode de la propriété qui peut être réglé.

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

78voto

Graeme Bradbury Points 2922

Si vous devez renvoyer un corps de motif, consultez WebFaultException.

Par exemple

 throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
 

25voto

JarrettV Points 9099

Pour 404, il existe une méthode intégrée dans WebOperationContext.Current.OutgoingResponse appelée SetStatusAsNotFound (message de chaîne) qui définit le code d'état sur 404 et une description d'état avec un appel.

Notez qu'il existe également SetStatusAsCreated (emplacement Uri) qui définit le code d'état sur 201 et l'en-tête d'emplacement avec un seul appel.

3voto

Hydtechie Points 11

Si vous souhaitez voir la description du statut dans l'en-tête, la méthode REST doit s'assurer de renvoyer null à partir de la section Catch () comme ci-dessous:

 catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}
 

0voto

OnlyMahesh Points 108

Cela n'a pas fonctionné pour moi pour WCF Data Services. Au lieu de cela, vous pouvez utiliser DataServiceException dans le cas de Data Services. J'ai trouvé le post suivant utile. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X