c# asp.net-web-api fiddler

c# - Fiddler testing API Post pasando una clase



asp.net-web-api (1)

Tengo este controlador de AP # C muy simple llamado "TestController" con un método de API como:

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

El contacto es solo una clase que se ve así:

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

Mi APIRouter se ve así:

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

PREGUNTA 1 :
¿Cómo puedo probar eso de un cliente C #?

Para el # 2 probé el siguiente código:

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

PREGUNTA 2 :
¿Cómo puedo probar esto desde Fiddler?
Parece que no puede encontrar cómo pasar una clase a través de la interfaz de usuario.


Para la pregunta 1: Implementaría el POST del cliente .NET de la siguiente manera. Tenga en cuenta que deberá agregar una referencia a los siguientes ensamblajes: 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; }

También reescribiría el método del controlador de la siguiente manera:

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

Para la pregunta 2: En Fiddler, cambie el verbo en el menú desplegable de GET a POST y coloque la representación JSON del objeto en el cuerpo de la solicitud.