web-dev-qa-db-fra.com

Comment puis-je retourner un code de statut HTTP personnalisé à partir d'un WCF REST méthode?

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?

84
kgriffs

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;
103
Eric Schoonover

Si vous devez renvoyer un corps de motif, consultez WebFaultException

Par exemple 

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

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.

23
JarrettV

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;
}
2
Hydtechie
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());

ref: https://social.msdn.Microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=cf?forum=wcf

1
user5234326

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";
0
eitzo

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

0
OnlyMahesh