2016-03-30 10 views
1

Ich habe ein Web-API-Projekt, und ich habe einen benutzerdefinierten Ausnahmefilter hinzugefügt. In diesem Ausnahmefilter möchte ich die JSON-Daten protokollieren, die der Client auf dem Server veröffentlicht hat. Ich habe jedoch keinen Zugang dazu. Kann mir jemand helfen, wo ich in den Objekten zugreifen kann?Web-API-Fehlerprotokollierung

actionExecutedContext.ActionContext.Request.Content scheint leer zu sein, aber in meinen simulierten Szenarien weiß ich, dass gültige Daten gepostet wurden.

public class MobileAppExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override async void OnException(HttpActionExecutedContext actionExecutedContext) 
    { 
     var sb = new StringBuilder(); 

     sb.Append($"Url:{actionExecutedContext.Request.RequestUri}"); 

     foreach(var header in actionExecutedContext.Request.Headers) 
     { 
      sb.Append($"Header:{header.Key} - {String.Join(", ", header.Value)}"); 
     }... 
    } 
} 
+1

Überprüfen Sie die Anfrage 'Request.Method' für POST und dann prüfen, die' Request.Content' – Nkosi

+0

Wenn Sie sagen, 'scheint leer zu sein. Was bedeutet das? Die Eigenschaft ist "null"? – CodingGorilla

+0

Nun, wenn ich eine "Quick-Uhr" tun obwohl sagt, es hat: {Content-Length: 3156 Content-Type: application/json } das ist es tatsächlichen Inhalt ist: \t \t actionExecutedContext.Request.Content.ReadAsStringAsync() \t Id = 382, ​​Status = RanToCompletion, Methode = "{null}", Ergebnis = "" \t System.Threading.Tasks.Task

Antwort

0

können Sie so versuchen, um zu sehen, ob Sie die json bekommen:

string RequestContent = ""; 

    RequestContent = Extract_Json_From_Request(actionContext.Request.Content); 

    private string Extract_Json_From_Request(HttpContent Requestcontent) 
     { 
      string RequestBody = ""; 

      try 
      { 
       var content = Requestcontent.ReadAsStringAsync().Result; 
       RequestBody = content.ToString(); 
      } 
      catch (Exception ex) 
      { 
       RequestBody = ex.Message; 

      } 
      return RequestBody; 

     } 
+0

Ich werde das am Montag versuchen, danke –

+0

Wow, das hat wie ein Zauber funktioniert, wie ist das anders als all die anderen Methoden, die mit leerem Inhalt zu kommen schienen? –

0

Sie sollten prüfen, ob dort tatsächlich Inhalt vorhanden ist, bevor Sie versuchen, darauf zuzugreifen.

public class MobileAppExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override async void OnException(HttpActionExecutedContext actionExecutedContext) 
    { 
     var sb = new StringBuilder(); 
     var request = actionExecutedContext.Request; 
     sb.Append($"Url:{request.RequestUri}"); 

     foreach(var header in request.Headers) 
     { 
      sb.Append($"Header:{header.Key} - {String.Join(", ", header.Value)}"); 
     } 

     if(request.Method == HttpMethod.Post && request.Headers.ContentLength > 0) { 
      var content = await request.Content.ReadAsStringAsync(); 
      sb.Append($"Content:{content}"); 
     } 
    } 
}