Me resulta difícil averiguar por qué la cadena enviada a través de la solicitud AJAX es nula. Console.WriteLine (datos) se muestra vacío. El estado es 200 OK. Si agrego algún código para analizar la cadena recibida, aparece un error que indica que JObject.Parse no puede ser nulo. No sé lo que me estoy perdiendo. El código javascript está bien. El método de acción también parece estar bien, pero mi conocimiento sobre Asp.Net Core y MVC es muy escaso, por lo que no estoy seguro. ¿Puede alguien señalar lo que me estoy perdiendo?
El código javascript:
let obj = {email: email_address.value}; let objStringified = JSON.stringify(obj); $.ajax({ type: 'POST', contentType: 'application/json; charset=UTF-8', data: objStringified, url: '@Url.Action("ReturnCheckAccountDuplication")', dataType: 'text', success: function(data) { console.log(data); }, error: function(error) { console.log("Keep trying", error); } });Código C#:
[HttpPost] public ActionResult ReturnCheckAccountDuplication([FromBody] string data) { Console.WriteLine(data); JObject jObject = JObject.Parse(data); string email = (string)jObject["email"]; bool emailExists = CheckAccountDuplication.Get(email); string returnResult = emailExists.ToString(); return Content(returnResult); }La solución en el lado del controlador es
public class AccountCheckModel { public string Email { get; set; } } [HttpPost] public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data) { string result = CheckAccountDuplication.Get(data.Email).ToString(); return Content(result); }Gracias a todos los miembros que comentaron sobre mi problema, especialmente a John Glenn, que proporcionó una solución. Llevaba varios días intentándolo pero sin éxito. Mi conocimiento de Asp.Net Core es muy pobre. Muchísimas gracias.
La solución más sencilla es crear un modelo que represente los datos JSON que recibirá su controlador. Por ejemplo, crea una clase así:
public class AccountCheckModel { public string email { get; set } }Luego, utilícelo como parámetro para su método de controlador:
public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data)Esta es la forma preferida de acceder al cuerpo de la solicitud. Para obtener el cuerpo de la solicitud como una cadena, debe pasar por algunos obstáculos serios .
Una forma alternativa de enviar sus datos a través de AJAX a su Controller :
var json = { email: email_address.value }; $.ajax({ type: 'POST', data: {'json': JSON.stringify(json)}, url: '@Url.Action("ReturnCheckAccountDuplication")', dataType: 'json', success: function(data) { console.log(data); }, error: function(error) { console.log("Keep trying", error); } }); Y su Controller :
[HttpPost] public ActionResult ReturnCheckAccountDuplication(string json) { Console.WriteLine(json); JObject jObject = JObject.Parse(json); string email = (string)jObject["email"]; bool emailExists = CheckAccountDuplication.Get(email); string returnResult = emailExists.ToString(); return Content(returnResult); }