Wenn bei einem WCF-REST-Aufruf ein Fehler auftritt, z. B. dass die angeforderte Ressource nicht gefunden wird, wie kann ich dann mit dem HTTP-Antwortcode (z. B. HTTP 404) in meiner OperationContract-Methode spielen?
Wenn bei einem WCF-REST-Aufruf ein Fehler auftritt, z. B. dass die angeforderte Ressource nicht gefunden wird, wie kann ich dann mit dem HTTP-Antwortcode (z. B. HTTP 404) in meiner OperationContract-Methode spielen?
Antworten:
Es gibt eine WebOperationContext
, auf die Sie zugreifen können, und sie hat eine OutgoingResponse
Eigenschaft vom Typ, OutgoingWebResponseContext
die eine StatusCode
Eigenschaft hat, die festgelegt werden kann.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
scheint jedoch zu funktionieren.
Wenn Sie einen Grundkörper zurückgeben müssen, schauen Sie sich WebFaultException an
Beispielsweise
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
, um einen zurückzugeben HttpStatusCode.Created
?
Für 404 gibt es eine integrierte Methode in der WebOperationContext.Current.OutgoingResponse mit dem Namen SetStatusAsNotFound (Zeichenfolgenmeldung) , die den Statuscode auf 404 und eine Statusbeschreibung mit einem Aufruf setzt.
Beachten Sie, dass es auch SetStatusAsCreated (Uri-Standort) gibt, der den Statuscode auf 201 und den Standortkopf mit einem Aufruf setzt.
Wenn Sie die Statusbeschreibung im Header sehen möchten, sollte die REST-Methode sicherstellen, dass im folgenden Abschnitt Catch () null zurückgegeben wird:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Sie können auch einen Statuscode und Grund Körper mit Rück WebOperationContext ‚s Statuscode und 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());
Dies hat bei WCF Data Services bei mir nicht funktioniert. Stattdessen können Sie bei Data Services die DataServiceException verwenden. Fand den folgenden Beitrag nützlich. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de