2013-06-19 1 views
9

Wie gebe ich ein HTTP 403 von einer WebAPI-Methode zurück? Ich habe versucht, mit HttpStatusCode.Forbidden ein HttpResponseException werfen, und ich habe versucht,Rückgabe von HTTP 403 in einer WebAPI-Methode

return request.CreateErrorResponse(HttpStatusCode.Forbidden, pEx); 

Keiner von denen Arbeit. Beide geben IMMER ein HTTP 200 zurück. Was vermisse ich? Es muss etwas Einfaches sein, aber ich sehe es nicht.

+0

Haben Sie die Lösung hier ausprobiert? http://StackOverflow.com/a/10658604/163495 – Richard

+0

http://StackOverflow.com/Questions/17081826/net-web-api-throw-exception-return-response-return-error-response-for-404- 400-r – SimSimY

+2

könnten Sie mehr Code teilen ... wir können Ihr Problem nicht reproduzieren –

Antwort

3

Möglicherweise haben Sie ein Problem mit Ihrer Routing-Konfiguration. Unten ist ein funktionierendes Beispiel. Setzen Sie es in Ihren Controller und sehen Sie, ob es funktioniert. Wenn dies nicht der Fall ist, überprüfen Sie Ihr Routing mit einem Diagnosetool (z. B. Cobisi Routing Assistant).

public HttpResponseMessage GetSomeString(int id) 
{ 
    // This method is not allowed! 
    return this.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "This method is not allowed!"); 
} 
+1

Teoman, das funktioniert. Seltsamerweise scheint es eine Art Interaktion mit DotNetOpenAuth zu sein. Meine Web-API ist ein mit DotNetOpenAuth gesicherter Endpunkt. Wenn ich meine Methode aufrufen, ohne die DotNetOpenAuth-Verifizierung zu durchlaufen, bekomme ich eine 403. Wenn ich sie jedoch durch DotNetOpenAuth verifiziere, und die Verifikation fehlschlägt (wozu ich eine 403 zurückgeben möchte), die gleiche Zeile von Code, den du vorgeschlagen hast, läuft, egal, was ich bekomme ein 200 zurück. Ich denke also, ich muss mit einem dotnetopenauth-Tag erneut posten. –

+3

Ungültiger Cast von HttpResponseMessage in String – user3953989

+0

Wie behebt man den ungültigen Cast in String? – GreyCloud

Verwandte Themen