2012-06-18 12 views
5

siguiente código:¿Cómo pasar el contenido en respuesta del filtro Excepción en Asp.net WebAPI? Considere

Mi problema es:

1) Me parece que no puede emitir los errores a HttpContent

2) No puedo utilizar el método de extensión CreateContent ya que doesn' t existe en el context.Response.Content.CreateContent

el ejemplo que aquí sólo parece proporcionar StringContent y me gustaría ser capaz de pasar el contenido como JsobObject: http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling

public class ServiceLayerExceptionFilter : ExceptionFilterAttribute 
    { 
     public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Response == null) 
      {     
       var exception = context.Exception as ModelValidationException; 

       if (exception != null) 
       { 
        var modelState = new ModelStateDictionary(); 
        modelState.AddModelError(exception.Key, exception.Description); 

        var errors = modelState.SelectMany(x => x.Value.Errors).Select(x => x.ErrorMessage); 

        // Cannot cast errors to HttpContent?? 
        // var resp = new HttpResponseMessage(HttpStatusCode.BadRequest) {Content = errors}; 
        // throw new HttpResponseException(resp); 

        // Cannot create response from extension method?? 
        //context.Response.Content.CreateContent 
       } 
       else 
       { 
        context.Response = new HttpResponseMessage(context.Exception.ConvertToHttpStatus()); 
       }     
      } 

      base.OnException(context); 
     } 

    } 

Respuesta

12
context.Response = new HttpResponseMessage(context.Exception.ConvertToHttpStatus()); 
context.Response.Content = new StringContent("Hello World"); 

también tiene la posibilidad de utilizar el CreateResponse (añadido en RC para reemplazar la clase genérica HttpResponseMessage<T> que ya no existe) método si desea pasar objetos complejos:

context.Response = context.Request.CreateResponse(
    context.Exception.ConvertToHttpStatus(), 
    new MyViewModel { Foo = "bar" } 
); 
+0

Lo sentimos véase más arriba enlace en mi publicación. Quiero crear contenido de tipo JsonObject. – jaffa

+0

Puede consultar mi respuesta actualizada. –

+0

Genial, me faltaba 'usar System.Net.Http'. ¡Gracias! – jaffa

Cuestiones relacionadas