Wie kann ich einen benutzerdefinierten HTTP-Statuscode von einer WCF REST-Methode zurückgeben?
Frage
Wenn etwas in einem WCF-REST Aufruf schief geht, wie die angeforderte Ressource nicht gefunden wird, wie kann ich mit dem HTTP-Response-Code spielen (um es so etwas wie HTTP 404, zum Beispiel Einstellung) in meiner Operation Methode?
Lösung
Es gibt eine WebOperationContext
, dass Sie zugreifen können und es hat einen OutgoingResponse
Eigenschaft vom Typ OutgoingWebResponseContext
die a StatusCode
Eigenschaft, die eingestellt werden kann.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
Andere Tipps
Wenn Sie einen Grund Körper zurückgeben müssen dann schauen Sie unter WebFaultException
Zum Beispiel
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
Für 404 gibt es ein in Verfahren gebaut auf dem WebOperationContext.Current.OutgoingResponse Namen SetStatusAsNotFound (string message) , die den Statuscode 404 und eine Zustandsbeschreibung festgelegt werden mit einem Anruf.
Hinweis: Es ist auch SetStatusAsCreated (Uri Ort) , die den Statuscode 201 und Location-Header mit einem Anruf eingestellt werden.
Wenn Sie die Statusbeschreibung in der Kopfzeile, um sehen mögen, sollte REST-Methode stellen Sie sicher, null zurückzukehren, aus dem Fang () Abschnitt wie folgt:
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());
Sie können auch einen Statuscode und Grund Körper zurückkehren mit WebOperationContext 's Status und StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
Das ist nicht für mich arbeiten für WCF Data Services. Stattdessen können Sie DataServiceException bei Data Services verwenden. Fand der folgende Beitrag nützlich. http://social.msdn.microsoft .com / Foren / en / adodotnetdataservices / thread / f0cbab98-fcd7-4248-af81-5f74b019d8de