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

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

  •  02-07-2019
  •  | 
  •  

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?

War es hilfreich?

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());

ref: https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top