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.