Tengo un servicio de API web ASP.NET que acepta datos JSON. Funciona perfectamente para todos nuestros tipos de datos JSON excepto uno. Los usuarios pueden enviar los resultados de la inspección desde sus dispositivos móviles. Los resultados de la inspección los recibe un servicio API web de ASP.NET como JSON.
Tengo pruebas unitarias escritas en C# que pueden enviar datos JSON de inspección sin ningún problema. Pero cada vez que envío los datos desde una página web, los datos JSON que se envían parecen truncarse.
Esto es lo que se envía.
{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic"}]},"Profile":{"EmailAddress":"myname@mycompany.com","OscarId":"1011369"}};Esto es lo que se recibe.
{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic"Se está truncando en una longitud de 254.
Aquí está el AJAX que crea la solicitud.
var url = "http://mywebservice/api/routingtasks?formname=inspection"; $.ajax({ type: "POST", url: url, contentType: "application/json", headers: { "Authorization" : "TESTUSER " + signedToken}, data: JSON.stringify(formdata), success: function(data){ alert("Task successfully processed."); }, error: function(error){ alert("error: " + JSON.stringify(error)); } })La firma del controlador de API web que recibe los datos JSON es esta.
public HttpResponseMessage RoutePostData(string formname, [FromBody] JToken postdata)Mis pruebas unitarias de C# pueden enviar los mismos datos JSON sin ningún problema, pero enviar los datos JSON desde una página web genera un problema.
Tu json está mal. "Perfil": { falta la llave "EmailAddress". No estoy seguro si es un error de copiar y pegar o un error de código. Sin embargo, se trunca justo después de fantástico.
Cambia tu json a
{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic"}]},"Profile":{"EmailAddress":"myname@mycompany.com","OscarId":"1011369"}}Si formdata ya es un objeto javascript, no es necesario que lo convierta en stringify .
$.ajax({ type: "POST", url: url, contentType: "application/json", headers: { "Authorization" : "TESTUSER " + signedToken}, data: formdata, success: function(data){ alert("Task successfully processed."); }, error: function(error){ alert("error: " + JSON.stringify(error)); } })Puede leer más en la página de documentación: http://api.jquery.com/jQuery.ajax/
Prueba esto:
<configuration> <appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="5000" /> </appSettings> </configuration>Establezca el valor en algo de su elección.