2012-06-05 13 views
8

que estoy tratando de criar a un HttpResponseException como se describe en este screencast (aproximadamente 1 minuto en)HttpResponseException no aceptar HttpStatusCode

throw new HttpResponseException(HttpStatusCode.Unauthorized); 

embargo, la aplicación no se compilará, ya que lanza el siguiente error:

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

La documentación en msdn dice que tiene un constructor que acepta la enumeración HttpResponseMessage. http://msdn.microsoft.com/en-us/library/hh835324%28v=vs.108%29.aspx

¿Qué me estoy perdiendo?

Gracias

+1

¿Podría publicar también su código real? –

+0

Claro. He actualizado la publicación. – hofnarwillie

+0

Cuando creas la HttpResponseException y pulsas el paréntesis derecho, ¿ves dos constructores como muestran los documentos o solo uno? Si es solo uno, está limitado a HttpResponseMessage .... O .... está usando una versión del framework que es diferente a la documentación. –

Respuesta

11

Si está utilizando el RC, esto ha cambiado. Proveedores:

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

Gracias! Muy apreciado. – hofnarwillie

+0

¿Y si necesito enviar un mensaje al cliente? – Zote

+4

@Zote - Crea una variable HttpResponseMessage, configura la propiedad Content y luego pasa a HttpResponseException. O si quieres ser realmente elegante, he escrito una publicación sobre [devolver un tipo de error personalizado] (http://smlync.tumblr.com/post/23104849655/return-custom-error-data-type-in- asp-net-web-api). – smlync

6

Tras ser sometido a encontrarse con este problema por mí mismo, estoy contento de ver la respuesta proporcionada por smlync, sin embargo, su decepcionante ver la API en este caso se ha recurrido a una mayor nivel de detalle! En mi humilde opinión, los siguientes se inclina hacia la descripción 'monstruosa', sobre todo cuando esta excepción (sobre todo) llena cada controlador muchas veces:

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

que pueden estar utilizando este lugar, tal vez algunos de ustedes le resultaría útil como así:

throw new Http404NotFoundException(); 

con los siguientes colocado dondequiera que le gustaría:

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

no sería esto más limpio, amado equipo ASP.NET WebAPI? Si solo fuera por este código de estado, aunque quizás incluya otros dos equivalentes de código de estado muy comunes.

Cuestiones relacionadas