none
FORMATO JSON A WEB API RRS feed

  • Pregunta

  • Saludos , estoy tratando de enviar un formato json de maestro detalle a un web api , y obtengo el error 

    ASP.NET Web API HTTP 400 Bad Request

    Este es el formato que envio

    {"Nombre":"","IDTipo":"15","IDEstado":"25","Descripcion":"aaa","Objetivos":"aaa","Beneficios":"aaa",
    "Fase":[{"IDFase":"15","FechaInicio":"01/09/2019","FechaFin":"01/09/2019","Monto":"0"},
    {"IDFase":"16","FechaInicio":"01/09/2019","FechaFin":"01/09/2019","Monto":"0"}]}


    llega a este punto y me envía essa excepción

      response = await client.PostAsync(serviceUrl, request.Content);
                    response.EnsureSuccessStatusCode();

    las entidades lasa tengo asi declaradas

       public class BEProyecto
        {
            public BEProyecto()
            {
                this.Fase = new List<BEFase>();
            }
            public int IDProyecto { get; set; }
            public string Nombre { get; set; }
            public int IDTipo { get; set; }
            public int IDEstado { get; set; }
            public string Descripcion { get; set; }
            public string Objetivos { get; set; }
            public string Beneficio { get; set; }
            //public string Comentarios { get; set; }
            public List<BEFase> Fase { get; set; }
    
            //public List<BEComentario> Comentario { get; set; }
        }

        public class BEFase
        {
            public int IDFase { get; set; }
            public DateTime FechaInicio { get; set; }
            public DateTime FechaFin { get; set; }
            public decimal Monto { get; set; }
           
        }
    }


    • Editado Augusto C lunes, 2 de septiembre de 2019 4:30
    lunes, 2 de septiembre de 2019 4:29

Respuestas

  • Sí, las partes que has mostrado están bien así. El error 400 lo está devolviendo el servicio al que llamas. Eso significa que al servicio no le está gustando alguno de los datos que transmites. Puede que sea algún valor incorrecto (donde la definición de "incorrecto" depende del servicio, no es que tú hayas hecho nada incorrecto en tu lado cliente -- por ejemplo, imagínate que en el string Descripcion el servicio solo admite 20 caracteres y tú le estás enviando un string que mide 21). También puede ser un formato incorrecto para el Json, es decir que esas clases que has creado no coincidan con la estructura que espera el servicio, o que algún tipo de dato no concuerde (por ejemplo, si el servicio esperase un dato numérico y lo pasases como string).

    También puede ser que tengas mal creado el request.Content. Por ejemplo, si pasas un content de tipo String y en el string metes el Json. Esto daría lugar a un nivel de comillas superfluo rodeando al Json, y el servidor lo rechazaría.

    • Propuesto como respuesta Sergio ParraModerator lunes, 2 de septiembre de 2019 7:08
    • Marcado como respuesta Augusto C martes, 3 de septiembre de 2019 18:59
    lunes, 2 de septiembre de 2019 6:33
    Moderador
  • hola

    Podrias usar el sitio

    http://json2csharp.com/

    para observar la estructura de class que se genera en base al json que estas enviando

    >>ASP.NET Web API HTTP 400 Bad Request

    lo que no veo es como envias el json por httpclient, pero recuerda que puedes crear instancias de c# y serializar a json

    HttpClient GetAsync, PostAsync, SendAsync in C#

    analiza el ultimo ejemplo en donde usa

    string strPayload = JsonConvert.SerializeObject(payload);

    asi es como serializas las class de c# a json para generar el contentent del httpclient

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Augusto C martes, 3 de septiembre de 2019 18:59
    lunes, 2 de septiembre de 2019 13:05
  • Al final me funcionó declarando las fechas como nullable

    aquí un ejemplo 

     public DateTime? FechaCreacion { get; set; }

    • Marcado como respuesta Augusto C jueves, 5 de septiembre de 2019 19:11
    jueves, 5 de septiembre de 2019 19:11

Todas las respuestas

  • Sí, las partes que has mostrado están bien así. El error 400 lo está devolviendo el servicio al que llamas. Eso significa que al servicio no le está gustando alguno de los datos que transmites. Puede que sea algún valor incorrecto (donde la definición de "incorrecto" depende del servicio, no es que tú hayas hecho nada incorrecto en tu lado cliente -- por ejemplo, imagínate que en el string Descripcion el servicio solo admite 20 caracteres y tú le estás enviando un string que mide 21). También puede ser un formato incorrecto para el Json, es decir que esas clases que has creado no coincidan con la estructura que espera el servicio, o que algún tipo de dato no concuerde (por ejemplo, si el servicio esperase un dato numérico y lo pasases como string).

    También puede ser que tengas mal creado el request.Content. Por ejemplo, si pasas un content de tipo String y en el string metes el Json. Esto daría lugar a un nivel de comillas superfluo rodeando al Json, y el servidor lo rechazaría.

    • Propuesto como respuesta Sergio ParraModerator lunes, 2 de septiembre de 2019 7:08
    • Marcado como respuesta Augusto C martes, 3 de septiembre de 2019 18:59
    lunes, 2 de septiembre de 2019 6:33
    Moderador
  • hola

    Podrias usar el sitio

    http://json2csharp.com/

    para observar la estructura de class que se genera en base al json que estas enviando

    >>ASP.NET Web API HTTP 400 Bad Request

    lo que no veo es como envias el json por httpclient, pero recuerda que puedes crear instancias de c# y serializar a json

    HttpClient GetAsync, PostAsync, SendAsync in C#

    analiza el ultimo ejemplo en donde usa

    string strPayload = JsonConvert.SerializeObject(payload);

    asi es como serializas las class de c# a json para generar el contentent del httpclient

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Augusto C martes, 3 de septiembre de 2019 18:59
    lunes, 2 de septiembre de 2019 13:05
  • Al final me funcionó declarando las fechas como nullable

    aquí un ejemplo 

     public DateTime? FechaCreacion { get; set; }

    • Marcado como respuesta Augusto C jueves, 5 de septiembre de 2019 19:11
    jueves, 5 de septiembre de 2019 19:11