3

私は

public void Post([FromBody]Record value)

-いくつかのjsonを使用してフィドラーから呼び出すことができるメソッド。

同じjsonでWizTools RESTClient 3.1を使用してMacからメソッドを呼び出すと、value常にnull. 解析されていないようです。

私はContent-Type: application/json両方のマシンで使用しており、Request.Contentオブジェクトが Visual Studio デバッガーのヘッダーであることを再確認しました。

次のように、プロパティが 2 つしかない単純なオブジェクトを使用する場合:

public class Test123 {
  public string name { get; set; }
  public int age { get; set; }
}

public void Post([FromBody]Test123 value)

フィドラーとMacの両方から呼び出すことができ、valuenullになることはありません。

これをデバッグする方法に関するヒントはありますか?たとえば、Mac から PC の iis/visual studio に送信された生の応答を確認する方法はありますか? フィドラーには表示されません。

4

3 に答える 3

7

アクション メソッドの場合Content-Type: application/json、 のリクエスト メッセージ本文を使用してリクエストを送信すると、{"name":"john", "age":20}正しくバインドされるはずです。ところで、は複合型であるため[FromBody]、使用する必要はありません。Test123

とにかく、このようなメッセージ ハンドラーを追加することで、生のリクエスト メッセージを表示できます。

public class MyHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(
                                             HttpRequestMessage request,
                                                CancellationToken token)
    {
        HttpMessageContent requestContent = new HttpMessageContent(request);
        string requestMessage = requestContent.ReadAsStringAsync().Result;

        return await base.SendAsync(request, token);
    }
}

このようなハンドラconfig.MessageHandlers.Add(new MyHandler());WebApiConfig.cs Registerメソッドに追加します。生のリクエストはrequestMessage変数になります。デバッグ中にそこを壊して調べたり、トレースに書き込んだりできます。

于 2013-07-12T12:38:00.480 に答える
0

content-typehttpヘッダーリクエストで通知する必要があると思います。サンプルの場合、フォーマットを渡したい場合jsonは、ヘッダーに次を追加する必要があります。

Content-Type: application/json

本文では:

{ name: "John", Age: 20 }

asp.net mvc Web API のモデル バインダーによって作成された Test123 オブジェクトを取得します。

私はFiddlerソフトウェアを使用して手動でリクエストを作成するのが好きで、生のリクエスト/レスポンスを表示したり、任意の http 動詞を使用してリクエストを作成したりすることもできます。

于 2013-07-12T11:32:41.163 に答える