2016-03-30 11 views
1

私はWeb APIプロジェクトを持っており、カスタム例外フィルタを追加しました。この例外フィルタでは、クライアントがサーバーに投稿したJSONデータをログに記録します。私はそれにアクセスできるようには思わない。誰かが私がそれにアクセスできるオブジェクトのどこで私を助けることができますか?Web APIエラーログ

actionExecutedContext.ActionContext.Request.Contentは空のようですが、私のシミュレートされたシナリオでは、有効なデータが投稿されていることがわかります。

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

は、POST要求 'Request.Method'を確認し、あなたが言うとき、' Request.Content' – Nkosi

+0

をチェック'空であるようです.'それはどういう意味ですか?プロパティは 'null'ですか? {のContent-Length:3156 のContent-Type:アプリケーション/ JSON }私は "クイックウォッチ" ですが、それは持っていると言うやるとき – CodingGorilla

+0

はまあ: \t \t actionExecutedContext.Request.Content.ReadAsStringAsync をこれは、実際の内容がありますです()\t ID = 382、ステータス= RanToCompletion、メソッド= "{null}"、結果= "" \t System.Threading.Tasks.Task

答えて

0

あなたはJSONを得ることができるかどうかを確認するために、このように試みることができます。

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

私は月曜日にそれを試してみます、ありがとう –

+0

うわー、それは魅力のように働いた、それは空のコンテンツに来るように見えた他のすべての方法とはどう違うのですか? –

0

実際にアクセスしようとする前に読むべきコンテンツがあることを確認する必要があります。

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