• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

157
Views
La migración de Asp.Net Core 2 a .Net 6 me dio problemas con XMLHttpRequest

Amigos, acabo de migrar mi aplicación ASP.Net Core 2 MVC a .Net 6, pero desde entonces tengo un problema extraño: los textos de mis respuestas XMLHttpRequest siempre están vacíos, "{}" o [{},{},{ },{}] para matrices, a pesar de que mi backend realmente devuelve datos.

Aquí hay un ejemplo de un método de control (TestLoad) que devuelve una clase simple (TestClass). Tenga en cuenta que cuando interrumpo la línea de retorno, el valor devuelto está bien, o al menos no veo nada malo (vea la imagen para ver la información de depuración): backend

 public class TestClass { public int id = 0; public string title = "Title"; public bool active = false; } public JsonResult TestLoad() { TestClass testClass = new TestClass(); testClass.id = 10; testClass.title = "Yeah man!"; testClass.active = true; JsonResult jsonRes = Json(testClass); return jsonRes; }

Pero una vez en el front-end, obtuve un objeto vacío, no indefinido ni nulo, pero realmente un objeto vacío (ver imagen para información de depuración): frontend

 var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var dt = JSON.parse(xmlhttp.responseText); if (dt == 'err') { alert('error'); } else if (dt !== null) { alert(dt.title); } } else { alert(xmlhttp.status); } } } ldwait(false, false); xmlhttp.open("GET", rv + "ajxGame/TestLoad", true); xmlhttp.setRequestHeader('Cache-Control', 'no-store'); xmlhttp.setRequestHeader("Content-Type", "application/json"); xmlhttp.send();

Cualquier ayuda sería muy apreciada ya que no tengo ni idea de lo que sucedió. De nuevo, mi código no ha cambiado, pero mi proyecto ha migrado de .Net Core 2 a .Net 6.

Gracias

about 3 years ago · Juan Pablo Isaza
3 answers
Answer question

0

¿Está utilizando páginas de Razor en su Asp.net core 6?

Si es así, la forma en que llama a su método puede ser el problema. Para solicitudes posteriores, llame desde el cliente ?handler=TestLoad y en el servidor asegúrese de que el nombre del método sea OnPostTestLoad() .

Las solicitudes de obtención están deshabilitadas de forma predeterminada y deben habilitarse. Mensaje de advertencia de Microsoft

Para obtener más información, consulte este enlace de documentos de Microsoft


Otro problema puede ser la forma en que devuelves tu clase. Intente devolverlo como un objeto JSON en su lugar.

 return new JsonResult(new {objClass: testClass});

Y en el lado del cliente, obtenga su clase como una propiedad de objeto

 let objClass = result.objClass;
about 3 years ago · Juan Pablo Isaza Report

0

agregaría un tipo de respuesta y reemplazaría onreadystatechange con onload

 xmlhttp.responseType = 'json'; xmlhttp.onload = () => { console.log("load - "+ JSON.stringify(xhr.response)); var data = xhr.response; }
about 3 years ago · Juan Pablo Isaza Report

0

En realidad, mi error fue simplemente que olvidé agregar { get; establecer; } en cada propiedad de mi TestClass en la parte de backend. Funcionó sin él en .Net Core 2, pero parece que ahora es obligatorio en .Net 6

 public class TestClass { public int id {get; set;} = 0; public string title {get; set;} = "Title"; public bool active {get; set;} = false; }

... gracias a los que intentaron una respuesta!

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error