2012-06-05 5 views
8

Ich versuche, ein HttpResponseException zu erhöhen, wie in diesem Screencast (ca. 1 Minute in) beschriebenHttpResponseException Annahme nicht Httpstatuscode

throw new HttpResponseException(HttpStatusCode.Unauthorized); 

Aber die App wird nicht kompiliert, wie es die folgenden Fehler wirft:

The best overloaded method match for 'System.Web.Http.HttpResponseException.HttpResponseException(System.Net.Http.HttpResponseMessage)' has some invalid arguments 

Die Dokumentation auf msdn sagt, dass es einen Konstruktor hat, der die HttpResponseMessage enum akzeptiert. http://msdn.microsoft.com/en-us/library/hh835324%28v=vs.108%29.aspx

Was fehlt mir?

Danke

+1

Konnten Sie Ihren tatsächlichen Code auch posten? –

+0

Sicher. Ich habe den Beitrag aktualisiert. – hofnarwillie

+0

Wenn Sie die HttpResponseException erstellen und den rechten Paren treffen, sehen Sie zwei Konstruktoren, wie die Docs anzeigen oder nur einen? Wenn nur einer, dann sind Sie auf eine HttpResponseMessage beschränkt .... ODER .... Sie verwenden eine Version des Frameworks, die sich von der Dokumentation unterscheidet. –

Antwort

11

Wenn Sie die RC verwenden, hat sich dies geändert. Versuchen:

throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)); 
+0

Danke! Sehr geschätzt. – hofnarwillie

+0

Und wenn ich eine Nachricht an den Kunden senden muss? – Zote

+4

@Zone - Erstellen Sie eine HttpResponseMessage-Variable, legen Sie die Content-Eigenschaft fest und übergeben Sie sie an die HttpResponseException. Oder, wenn Sie wirklich schick werden wollen, habe ich einen Beitrag geschrieben über [einen benutzerdefinierten Fehlertyp zurückgeben] (http://smlync.tumblr.com/post/23104849655/returning-custom-error-data-type-in- asp-net-web-api). – smlync

6

Having läuft nur in dieses Problem selbst, ich bin froh, die Antwort von smlync zur Verfügung gestellt, um zu sehen, aber sein enttäuschenden die API in diesem Fall zu sehen, hat zu einem größeren Ausführlichkeit gedreht! IMHO, die folgenden lehnt sich in Richtung der Bezeichnung ‚ungeheuerlich‘, vor allem, wenn diese Ausnahme (vor allem) füllt jeden Controller ein Vielfaches:

throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 

ich diese stattdessen verwenden kann, vielleicht einige von euch würde es nützlich als gut:

throw new Http404NotFoundException(); 

Mit der platziert folgenden wo auch immer Sie möchten:

public class Http404NotFoundException : HttpResponseException 
{ 
    public Http404NotFoundException() 
     : base(new HttpResponseMessage(HttpStatusCode.NotFound)) { } 
} 

wäre das ASP.NET nicht sauberer sein, geliebtes WebAPI Team? Wenn nur für diesen Statuscode, aber vielleicht ein paar andere der sehr gängigen Statuscodeäquivalente einwerfen.