web-dev-qa-db-fra.com

Fiddler teste l'API Post en passant une classe [Frombody]

J'ai ce très simple APIController C # nommé "TestController" avec une méthode API comme:

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

Contact est juste une classe qui ressemble à ceci:

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

Mon APIRouter ressemble à ceci:

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

QUESTION 1:
Comment puis-je tester cela à partir d'un client C #?

Pour # 2, j'ai essayé le code suivant:

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

QUESTION 2:
Comment puis-je tester cela auprès de Fiddler?
Je n'arrive pas à trouver comment passer un cours via l'interface utilisateur.

16
SF Developer

Pour la question 1: j'implémenterais le POST du client .NET comme suit. Notez que vous devrez ajouter une référence aux assemblys suivants: 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;

    }

Je réécrirais également la méthode du contrôleur comme suit:

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

Pour la question 2: dans Fiddler, changez le verbe dans la liste déroulante GET en POST et mettez la représentation JSON de l'objet dans le corps de la demande

enter image description here

28
Abhijeet Patel