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

StackOverflow https://stackoverflow.com/questions/140104

  •  02-07-2019
  •  | 
  •  

Question

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 (le définir à quelque chose comme HTTP 404, par exemple) dans ma méthode OperationContract?

Était-ce utile?

La solution

Il existe un WebOperationContext auquel vous pouvez accéder et dont le OutgoingResponse de type OutgoingWebResponseContext qui a un Propriété StatusCode pouvant être définie.

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

Autres conseils

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 sur WebOperationContext.Current.OutgoingResponse appelée SetStatusAsNotFound (message de chaîne) qui définit le code de statut sur 404 et une description de statut. 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());

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

Vous pouvez également renvoyer un code de statut et un corps de motif avec Code d'état 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. J'ai trouvé le post suivant utile. http://social.msdn.microsoft .com / Forums / fr / adodotnetdataservices / thread / f0cbab98-fcd7-4248-af81-5f74b019d8de

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top