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?
Réponses
Trop de publicités?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;
Si vous devez renvoyer un corps de motif, consultez WebFaultException.
Par exemple
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
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.
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;
}
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