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 définissant par exemple à HTTP 404 dans ma méthode OperationContract?
Il existe une WebOperationContext
à laquelle vous pouvez accéder et elle a une OutgoingResponse
propriété de type OutgoingWebResponseContext
qui possède une StatusCode
propriété pouvant être définie.
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é SetStatusAsNotFound (message 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éfinira 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 vous 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;
}
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
Vous pouvez également renvoyer un code d'état et un corps de motif avec WebOperationContext 's StatusCode et StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
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. Vous avez trouvé le message suivant utile http://social.msdn.Microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de