web-dev-qa-db-ja.com

Visual StudioからASP.NET Web APIでリクエスト本文を表示するにはどうすればよいですか?

Visual StudioからASP.NET Web APIでリクエスト本文を表示するにはどうすればよいですか? ASP.NET MVCでは、QuickWatchを使用してRequestオブジェクトを検査し、本文のコンテンツと投稿されたフォームデータを表示できます。私が読んだことから、ASP.NET Web APIでは、本文を複数回読むことはできません。

これは、特定の値が正しくバインドされなかった理由を見つけようとするときに、非常に面倒です。トレース/ロギングを設定せずにこれを行う簡単な方法はありますか?

22
Omar

Fiddler をインストールするのが最も簡単です。次に、回線を介して送信されるすべてを確認し、リクエストペイロードだけでなくHTTPヘッダーも検査します。 JavaScriptからAPIを使用している場合、FireBug、Chrome開発者ツールバー、およびIE開発者ツールは、Webサイトによって行われたすべてのネットワーク要求を表示します。

サーバー上のトラフィックを絶対に検査する必要がある場合、ASP.NETアプリケーション内でWeb APIをホストしている場合、イミディエイトウィンドウに次の行を配置できます。

new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()
33
Darin Dimitrov

body >> Form-dataが必要な場合

Post localhost:53356/api/carparksapi/GetRecod

key = jsonRequestおよびvalue = [{"abcd": "zxxx"}]

       //  API -Controller Method :: 

        var httpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
        var foo = httpContext.Request.Form["jsonRequest"];
        return foo; //This is value passed in request
3
Saurin Vala

私にとって@DarinDimitrovの答えは

エラーCS0246:型または名前空間名 'StreamReader'が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

名前空間を追加した

new System.IO.StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd()

これで時間を節約できることを願っています

2

ASP.NET Coreの場合、イミディエイトウィンドウでこれを使用します。

new System.IO.StreamReader(Request.Body).ReadToEnd()
1
gldraphael

私にとって@Matas Vaitkeviciusの答えは与えました

エラーCS1061:「HttpContextBase」には「Current」の定義が含まれておらず、タイプ「HttpContextBase」の最初の引数を受け入れる拡張メソッド「Current」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

HttpContext.CurrentをSystem.Web.HttpContext.Currentに置き換えると、それができました

new System.IO.StreamReader(System.Web.HttpContext.Current.Request.InputStream).ReadToEnd()

これで時間を節約できることを願っています

0
Taran

Steamの位置が0の位置にある場合、これらの値はすべて機能します。

HttpContext.Current.Request.InputStream.Position =  0;
var body = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
0
dampee