2012-06-18 4 views
5

folgenden Code:Wie übergebe ich Inhalt in der Antwort von Exception-Filter in Asp.net WebAPI? Betrachten

Mein Problem ist:

1) Ich kann nicht scheinen, um die Fehler zu HttpContent

2) zu werfen ich die CreateContent Extension-Methode nicht verwenden können, da dies ‚doesn t existieren auf dem context.Response.Content.CreateContent

Das Beispiel hier scheint nur StringContent zu schaffen, und ich möchte den Inhalt als JsobObject können passieren: 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); 
     } 

    } 

Antwort

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

Sie haben auch die Möglichkeit, die CreateResponse (hinzugefügt in RC die allgemeine HttpResponseMessage<T> Klasse zu ersetzen, die nicht mehr vorhanden ist) zu verwenden Methode, wenn Sie komplexe Objekte übergeben möchten:

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

Leider oben sehen Link in meinem Post. Ich möchte Inhalt von JsonObject-Typ erstellen. – jaffa

+0

Sie können meine aktualisierte Antwort auschecken. –

+0

Großartig, mir fehlte die Verwendung von System.Net.Http. Vielen Dank! – jaffa

Verwandte Themen