Hoe kan ik een aangepaste HTTP-statuscode van een WCF REST-methode retourneren?

Als er iets misgaat in een WCF REST-aanroep, zoals de gevraagde bron is niet gevonden, hoe kan ik dan spelen met de HTTP-responscode (bijvoorbeeld door deze in te stellen op HTTP 404) in mijn OperationContract-methode?

p>


Antwoord 1, autoriteit 100%

Er is een WebOperationContextwaartoe u toegang hebt en het heeft een OutgoingResponseeigenschap van het type OutgoingWebResponseContextmet een StatusCodeeigenschap die kan worden ingesteld.

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

Antwoord 2, autoriteit 65%

Als u een hoofdtekst met reden wilt retourneren, kijk dan eens op WebFaultException

Bijvoorbeeld

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

Antwoord 3, autoriteit 20%

Voor 404 is er een ingebouwde methode op de WebOperationContext.Current.OutgoingResponsegenaamd SetStatusAsNotFound(string message)die de statuscode instelt op 404 en een statusbeschrijving met één telefoontje.

Let op: SetStatusAsCreated(Uri location)waarmee de statuscode met één aanroep wordt ingesteld op 201 en locatieheader.


Antwoord 4, autoriteit 3%

Je kunt ook een statuscode en de hoofdtekst van de reden retourneren met WebOperationContext‘s StatusCodeen Statusbeschrijving:

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

Antwoord 5, autoriteit 2%

Als u de statusbeschrijving in de koptekst wilt zien, moet de REST-methode ervoor zorgen dat u null retourneert vanuit de sectie Catch() zoals hieronder:

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}

Antwoord 6

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


Antwoord 7

Dit werkte niet voor mij voor WCF Data Services. In plaats daarvan kunt u DataServiceException gebruiken in het geval van Data Services. Vond het volgende bericht nuttig.
http://social.msdn.microsoft .com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

Other episodes