Se qualcosa va storto in una chiamata REST WCF, ad esempio 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?
Se qualcosa va storto in una chiamata REST WCF, ad esempio 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?
Risposte:
C'è una a WebOperationContext
cui puoi accedere e ha una OutgoingResponse
proprietà di tipo OutgoingWebResponseContext
che ha una StatusCode
proprietà che può essere impostata.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
, tuttavia, sembra funzionare.
Se devi restituire un corpo del motivo, dai un'occhiata a WebFaultException
Per esempio
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
per restituire un HttpStatusCode.Created
?
Per 404 esiste un metodo incorporato in WebOperationContext.Current.OutgoingResponse chiamato SetStatusAsNotFound (messaggio di stringa) che imposterà il codice di stato su 404 e una descrizione dello stato con una chiamata.
Nota che c'è anche SetStatusAsCreated (Uri location) che imposterà il codice di stato su 201 e l'intestazione della posizione con una chiamata.
Se desideri vedere 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;
}
È inoltre possibile restituire un corpo statuscode e la ragione con WebOperationContext s' StatusCode e StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
Questo non ha funzionato per me per WCF Data Services. È invece possibile utilizzare DataServiceException in caso di servizi dati. Ho trovato utile il seguente post. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de