2012-06-05 9 views
8

Próbuję podnieść HttpResponseException jak opisano w tym screencast (około 1 min)HttpResponseException nie akceptując HttpStatusCode

throw new HttpResponseException(HttpStatusCode.Unauthorized); 

Jednak aplikacja nie będzie kompilować, jak rzuca się następujący błąd:

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

Dokumentacja na msdn mówi, że ma konstruktora, który akceptuje wyliczenie HttpResponseMessage. http://msdn.microsoft.com/en-us/library/hh835324%28v=vs.108%29.aspx

Czego mi brakuje?

Dzięki

+1

Czy możesz również zamieścić swój aktualny kod? –

+0

Pewnie. Zaktualizowałem wpis. – hofnarwillie

+0

Po utworzeniu wyjątku HttpResponseException i trafieniu w prawy nagłówek, widzisz dwa konstruktory jako dokument lub inną? Jeśli tylko jeden, to jesteś ograniczony do HttpResponseMessage .... LUB .... używasz wersji framework, która jest inna niż w dokumentacji. –

Odpowiedz

11

Jeśli korzystasz z pilota, uległo to zmianie. Spróbuj:

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

Dzięki! Bardzo doceniane. – hofnarwillie

+0

A jeśli muszę wysłać wiadomość do klienta? – Zote

+4

@Zote - Utwórz zmienną HttpResponseMessage, ustaw właściwość Content, a następnie przejdź do wyjątku HttpResponseException. Lub jeśli chcesz się naprawdę spodobać, napisałem post na [zwracający niestandardowy typ błędu] (http://smlync.tumblr.com/post/23104849655/returning-custom-error-data-type-in- asp-net-web-api). – smlync

6

Mając tylko napotkasz ten problem się cieszę, aby zobaczyć odpowiedź dostarczoną przez smlync, choć jego rozczarowujące, aby zobaczyć API w tym przypadku okazała się większą szczegółowość! IMHO, następujące skłania się ku położeniu „potworne”, zwłaszcza gdy ten wyjątek (przede wszystkim) wypełnia każdy kontroler wielokrotnie:

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

I może być używany zamiast tego, być może niektórzy z was uważają, że jest użyteczny jako dobrze:

throw new Http404NotFoundException(); 

z następującymi umieszczony gdziekolwiek chcesz:

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

nie Mogłoby to być czystsze, ukochany zespół ASP.NET WebAPI? Jeśli tylko dla tego kodu statusu, chociaż może podać kilka innych bardzo popularnych odpowiedników kodu statusu.

Powiązane problemy