Tengo una matriz en JS ( var selectedEmails = []; ) Después de recopilar los correos electrónicos seleccionados de una cuadrícula, llamo a un controlador GET to C#:
$.ajax({ type: 'GET', url: '@Url.Action("SendEmailBatchs", "account")', data: { emails: selectedEmails }, contentType: 'application/json', success: (data) => { console.log("data", data); } })Cuando se llama, el parámetro en C# no obtiene datos. Revisé JS y los correos electrónicos están en la matriz. Usando puntos de interrupción, confirmé que se está llamando al método del controlador:
Controlador:
[HttpGet("sendemailbatchs")] public async Task<ActionResult> SendEmailBatchs(string[] emails) { ... foreach (ApplicationUser user in users) { await SendEmailConfirmation(user); } return Ok; } Cambiando los datos a data: { emails: JSON.stringify(selectedEmails) }, pasará una matriz con 1 elemento solamente, que contiene una lista de cadenas de correos electrónicos "[\"loes.vea@phanc.com\",\"MaAlonso.Mfizer.com\",\"cech@mll-int.cm\",\"jier.aris@si.com\"]"
¿Cuál sería el parámetro correcto de JS para obtener una cadena ARRAY donde cada correo electrónico es un elemento de la matriz?
emails = [0]: "loes.vea@phanc.com\", [1]: \"MaAlonso.Mfizer.com\", ...Hay una brecha entre lo que espera en el controlador y lo que está enviando a través de la llamada ajax.
public async Task<ActionResult> SendEmailBatchs(string[] emails)Entendamos el parámetro de la función anterior, espera una serie de cadenas y se referirá a ella como correos electrónicos en el cuerpo de la función. Por lo tanto, deberá pasar una serie de cadenas en el cuerpo de la solicitud.
PFB mi controlador simple y llamada ajax correspondiente:
[HttpGet("api/test")] public ActionResult<int> RecieveData(string[] emails) { return emails.Count(); }Llame desde la interfaz de usuario de esta manera:
var settings = { "url": "https://localhost:5000/api/test", "method": "GET", "headers": { "Content-Type": "application/json" }, "data": JSON.stringify([ "john@example.com", "jane@example.com" ]), }; $.ajax(settings).done(function (response) { console.log(response); });entonces, después de seguir las sugerencias de Devesh , terminé con
var settings = { "url": '@Url.Action("SendEmailBatchs", "account")', "method": "GET", "headers": { "Content-Type": "application/json" }, "data": { emails: JSON.stringify(selectedEmails)}, };el problema persistió, porque necesitaba DESERIALIZAR el resultado, en C#:
public async Task<ActionResult> SendEmailBatchs(string emails) { var selectedEmails = JsonConvert.DeserializeObject<string[]>(emails); //DO STUFF }Gracias