2016-03-30 33 views
1

Web API projem var ve özel bir özel durum filtresi ekledim. Bu özel durum filtresinde, istemciye sunucuya gönderilen JSON verilerini günlüğe kaydetmek istiyorum. Buna rağmen erişimim yok gibi görünüyor. Birisi bana ulaşabileceğim nesnelerde nerede yardımcı olabilir?Web API hata kaydı

actionExecutedContext.ActionContext.Request.Content boş görünüyor, ancak simüle edilmiş senaryolarımda geçerli veriler yayınlandığını biliyorum.

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

Kontrol isteği POST için 'Request.Method' ve sonra kontrol' dediğinizde – Nkosi

+0

Request.Content' 'Boş görünüyor.' Bu ne anlama geliyor? Mülk null mı? {Content-Length: 3156 Content-Type: application/json } Bir "hızlı izlemek" olmasına rağmen bunu söylüyor ne zaman – CodingGorilla

+0

Eh: \t \t actionExecutedContext.Request.Content.ReadAsStringAsync bu gerçek içeriğini olmasıdır() \t Id = 382, ​​Durum = RanToCompletion, Yöntem = "{null}", Sonuç = "" \t System.Threading.Tasks.Task

cevap

0

Eğer json alıp alamayacağınızı öğrenmek için böyle deneyebilirsiniz:

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

Pazartesi günü bir deneme yapacağım, teşekkürler –

+0

Wow, bu bir cazibe gibi çalıştı, boş içerikle birlikte gelmiş gibi görünen tüm diğer yöntemlerden farklı mıydı? –

0

Erişmeye çalışılmadan önce okunması gereken içeriğin olup olmadığını kontrol etmelisiniz.

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}"); 
     } 
    } 
}