web-dev-qa-db-ja.com

[Frombody]クラスを渡すAPI Postをテストするフィドラー

「TestController」という名前のこの非常にシンプルなC#APIControllerには、次のようなAPIメソッドがあります。

[HttpPost]
public string HelloWorld([FromBody] Testing t)
{
    return t.Name + " " + t.LastName;
}

Contactは、次のようなクラスです。

public class Testing
{
    [Required]
    public string Name;
    [Required]
    public string LastName;
}

APIRouterは次のようになります。

config.Routes.MapHttpRoute(
     name: "TestApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

質問1
C#クライアントからどのようにテストできますか?

#2では、次のコードを試しました。

private async Task TestAPI()
{
    var pairs = new List<KeyValuePair<string, string>> 
    {
       new KeyValuePair<string, string>("Name", "Happy"),
       new KeyValuePair<string, string>("LastName", "Developer")
    };

    var content = new FormUrlEncodedContent(pairs);

        var client = new HttpClient();                        
        client.DefaultRequestHeaders.Accept.Add(
             new MediaTypeWithQualityHeaderValue("application/json"));

        var result = await client.PostAsync( 
             new Uri("http://localhost:3471/api/test/helloworld", 
                    UriKind.Absolute), content);

        lblTestAPI.Text = result.ToString();
    }

質問2
Fiddlerからどのようにテストできますか?
UIを介してクラスを渡す方法が見つからないようです。

16
SF Developer

質問1の場合、次のように.NETクライアントからPOSTを実装します。次のアセンブリへの参照を追加する必要があることに注意してください。a)System.Net.Http b)System。 Net.Http.Formatting

public static void Post(Testing testing)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:3471/");

        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

        // Create the JSON formatter.
        MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();

        // Use the JSON formatter to create the content of the request body.
        HttpContent content = new ObjectContent<Testing>(testing, jsonFormatter);

        // Send the request.
        var resp = client.PostAsync("api/test/helloworld", content).Result;

    }

また、コントローラーメソッドを次のように書き換えます。

[HttpPost]
public string HelloWorld(Testing t)  //NOTE: You don't need [FromBody] here
{
  return t.Name + " " + t.LastName;
}

質問2の場合:Fiddlerで、ドロップダウンの動詞をGETからPOSTに変更し、リクエスト本文にオブジェクトのJSON表現を入れます

enter image description here

28
Abhijeet Patel