¿Cómo podemos publicar datos en formato JSON en una API web desde un controlador MVC?

  • Primero debe crear una API web que se pueda consumir en el controlador MVC
  • El siguiente es un enlace preferido para crear y consumir API web en MVC

Cómo crear API web en ASP.Net MVC

CÓDIGO DE MUESTRA Para Insertar / Actualizar / Eliminar / Seleccionar datos hacia y desde la API web del controlador MVC

using Newtonsoft.Json;

namespace MVC_Client.Controllers

{

public class EmployeeInfoController : Controller

{

HttpClient client;

//The URL of the WEB API Service

string url = " http: // localhost: 60143 / api / Emplo… " ;

//The HttpClient Class, this will be used for performing

//HTTP Operations, GET, POST, PUT, DELETE

//Set the base address and the Header Formatter

public EmployeeInfoController()

{

client = new HttpClient();

client.BaseAddress = new Uri(url);

client.DefaultRequestHeaders.Accept.Clear();

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

}

// GET: EmployeeInfo

public Index() async Task Index()

{

HttpResponseMessage responseMessage = await client.GetAsync(url);

if (responseMessage.IsSuccessStatusCode)

{

var responseData = responseMessage.Content.ReadAsStringAsync().Result ;

var Employees = JsonConvert.DeserializeObject >(responseData);

return View(Employees);

}

return View( "Error" );

}

public ActionResult Create()

{

return View( new EmployeeInfo());

}

//The Post method

[HttpPost]

public Create(EmployeeInfo Emp) async Task Create(EmployeeInfo Emp)

{

HttpResponseMessage responseMessage = await client.PostAsJsonAsync(url,Emp);

if (responseMessage.IsSuccessStatusCode)

{

return   RedirectToAction( "Index" );

}

return RedirectToAction( "Error" );

}

public Edit( async Task Edit( int id)

{

HttpResponseMessage responseMessage = await client.GetAsync(url+ "/" +id);

if (responseMessage.IsSuccessStatusCode)

{

var responseData = responseMessage.Content.ReadAsStringAsync().Result;

var Employee = JsonConvert.DeserializeObject (responseData);

return View(Employee);

}

return View( "Error" );

}

//The PUT Method

[HttpPost]

public Edit( async Task Edit( int id,EmployeeInfo Emp)

{

HttpResponseMessage responseMessage = await client.PutAsJsonAsync(url+ "/" +id, Emp);

if (responseMessage.IsSuccessStatusCode)

{

return RedirectToAction( "Index" );

}

return RedirectToAction( "Error" );

}

public Delete( async Task Delete( int id)

{

HttpResponseMessage responseMessage = await client.GetAsync(url + "/" + id);

if (responseMessage.IsSuccessStatusCode)

{

var responseData = responseMessage.Content.ReadAsStringAsync().Result;

var Employee = JsonConvert.DeserializeObject (responseData);

return View(Employee);

}

return View( "Error" );

}

//The DELETE method

[HttpPost]

public Delete( async Task Delete( int id, EmployeeInfo Emp)

{

HttpResponseMessage responseMessage =await client.DeleteAsync(url + "/" + id);

if (responseMessage.IsSuccessStatusCode)

{

return RedirectToAction( "Index" );

}

return RedirectToAction( "Error" );

}

}

}

Utilizar

contentType: “aplicación / json”

JSON.stringify usar el método JSON.stringify para convertirlo a una cadena JSON cuando lo envíe,

Y la carpeta modelo enlazará los datos json a su objeto de clase.

El siguiente código funcionará bien (probado)

$ (function () {
cliente var = {contact_name: “Scott”, company_name: “HP”};
$ .ajax ({
tipo: “POST”,
datos: JSON.stringify (cliente),
url: “api / Cliente”,
contentType: “aplicación / json”
});
});

Resultado

contentType propiedad contentType le dice al servidor que estamos enviando los datos en formato JSON. Como enviamos una estructura de datos JSON, el enlace del modelo se realizará correctamente.

Si inspecciona los encabezados de la solicitud ajax, puede ver que el valor de Content-Type se establece como application/json .

Si no especifica contentType explícitamente, utilizará el tipo de contenido predeterminado que es application/x-www-form-urlencoded;

Aquí está el código de muestra y la demostración del código para pasar el modal en formato json al controlador en mvc.

Pase el objeto del modelo de publicación en formato json al controlador desde la solicitud jquery ajax en asp.net mvc