it-swarm.com.de

Wie kann ich einen benutzerdefinierten HTTP-Statuscode von einer WCF zurückgeben? REST Methode?

Wenn bei einem WCF REST -Aufruf etwas nicht funktioniert, z. B. wenn die angeforderte Ressource nicht gefunden wurde, wie kann ich dann mit dem HTTP-Antwortcode (der beispielsweise auf HTTP 404 eingestellt ist) in meiner OperationContract-Methode spielen?

84
kgriffs

Es gibt eine WebOperationContext , auf die Sie zugreifen können, und es verfügt über eine OutgoingResponse - Eigenschaft des Typs OutgoingWebResponseContext , die eine StatusCode - Eigenschaft hat, die eingestellt werden kann.

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

Wenn Sie einen Grundtext zurückgeben müssen, schauen Sie unter WebFaultException nach. 

Zum Beispiel 

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

Für 404 gibt es eine eingebaute Methode für WebOperationContext.Current.OutgoingResponse mit dem Namen SetStatusAsNotFound (string message), die den Statuscode auf 404 und eine Statusbeschreibung mit einem Aufruf setzt. 

Beachten Sie auch, dass SetStatusAsCreated (Uri-Speicherort) den Statuscode mit einem Aufruf auf 201 und den Standort-Header setzt.

23
JarrettV

Wenn Sie die Statusbeschreibung in der Kopfzeile sehen möchten, sollte die Methode REST sicherstellen, dass im Abschnitt Catch () der Wert null zurückgegeben wird:

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

1
user5234326

Sie können einen Statuscode und einen Grundtextkörper auch mit WebOperationContext 's StatusCode und StatusDescription :

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

Für WCF Data Services funktionierte das nicht. Stattdessen können Sie DataServiceException für Data Services verwenden. Fand den folgenden Beitrag nützlich . http://social.msdn.Microsoft.com/Forums/de/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

0
OnlyMahesh