2014-03-25 16 views
32

Ich implementiere eine API mit WCF und die Spezifikation sagt unter bestimmten Umständen HTTP 429 zurück.Wie HTTP 429 zurückgegeben wird?

Normalerweise würde ich einfach schreiben:

throw new WebFaultException(HttpStatusCode.NotFound); 

jedoch die Httpstatuscode-Enumeration nicht

429.

enthält kann ich offensichtlich auf die Enum werfen

throw new WebFaultException((HttpStatusCode)429); 

Allerdings bin ich besorgt, dass dies nicht das korrekte Ergebnis für die Anwendung, die meine API aufruft, erzeugt.

Was ist der beste Weg, um den HttpStatusCode zu erweitern und gültige (aber nicht unterstützte) HTTP-Status zu senden?

+2

diese Gefunden lose bezogenen Link. Es beantwortet nicht die Frage, aber könnte Hintergrund zur Verfügung stellen: http://stackoverflow.com/questions/2022887/how-can-i-createa-custom-http-status-code-from-a-wcf-rest-method – TypeIA

+1

Welche Art von Spezifikation erfordert das Senden eines nicht registrierten Statuscodes? –

+0

@JulianReschke wenn Sie die HTTP-Spezifikation überprüfen 429 ist in der Tat ein gültiger Code - es ist nur .NET unterstützt es nicht in der Enum – Liath

Antwort

24

Vom C# Language Specification 5.0:

Der Satz von Werten, die ein Aufzählungstyp auf nehmen kann, wird durch seine Enum-Mitglieder beschränkt. Insbesondere kann jeder Wert des zugrunde liegenden Typs einer Enumeration in den Enum-Typ umgewandelt werden und ist ein eindeutiger gültiger Wert von dieser Enum-Typ.

Das ist also völlig in Ordnung zu tun und wäre die beste Wahl:

throw new WebFaultException((System.Net.HttpStatusCode)429); 
+2

Es ist aus der Sicht der Sprache in Ordnung, aber es bedeutet nicht, dass die API es richtig behandelt ... –

+0

Die Ausnahme hier wird aus der API geworfen. Es liegt in der Verantwortung des Anrufers, diese Ausnahme zu behandeln. –

+0

Danke dafür. Ich wollte "Locked" 423 zurückgeben. Gut zu wissen, dass Casting funktioniert. –

0

Wenn Sie den WCF-Dienst mit IIS hosten, können Sie ASP.Net Compatibility Mode aktivieren. Damit können Sie den Status von HttpContext.Current.Response.StatusCode auf 429 setzen.

Mit diesem gesagt. Ich denke deine beste Wette ist, das 429 zum HttpStatusCode zu werfen und zu sehen, was passiert. Wenn das funktioniert, können Sie sich die Kopfschmerzen ersparen.

Verwandte Themen