Come posso restituire un codice di stato HTTP personalizzato da un metodo REST WCF?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Se qualcosa non funziona in una chiamata REST WCF, come la risorsa richiesta non viene trovata, come posso giocare con il codice di risposta HTTP (impostandolo su qualcosa come HTTP 404, ad esempio) nel mio metodo OperationContract?

È stato utile?

Soluzione

Esiste un WebOperationContext a cui puoi accedere e ha un OutgoingResponse proprietà di tipo OutgoingWebResponseContext che ha un StatusCode proprietà che può essere impostata.

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

Altri suggerimenti

Se devi restituire un corpo della motivazione, dai un'occhiata a WebFaultException

Ad esempio

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

Per 404 esiste un metodo integrato in WebOperationContext.Current.OutgoingResponse chiamato SetStatusAsNotFound (messaggio stringa) che imposterà il codice di stato su 404 e una descrizione dello stato con una chiamata.

Nota che c'è anche, SetStatusAsCreated (posizione Uri) che imposterà il codice di stato su 201 e l'intestazione della posizione con una chiamata.

Se si desidera visualizzare la descrizione dello stato nell'intestazione, il metodo REST dovrebbe assicurarsi di restituire null dalla sezione Catch () come di seguito:

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?forum=wcf

Puoi anche restituire uno statuscode e un body reason con WebOperationContext ' StatusCode e StatusDescription :

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";

Questo non ha funzionato per me per WCF Data Services. Invece, è possibile utilizzare DataServiceException in caso di Data Services. Ho trovato utile il seguente post. http://social.msdn.microsoft .com / Forum / it / adodotnetdataservices / thread / f0cbab98-fcd7-4248-af81-5f74b019d8de

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top