Я опираюсь, чтобы тратить api услугу post c#

Они могли бы поддерживать меня несмотря на то, что ориентировали бы меня пожалуйста. Я стараюсь возвышать потребление услуги, которую возвращает этот json: Я не знаю, как тратить услугу, запутан, как перемещать его параметры или в каком формате

    "mensaje": "Operación exitosa.",
    "folio": "awsapigeermczdev02-3538-729-1",
    "resultado": {
        "cotizaciones": [
            {
                "bonificacionAbonos": "0.2640",
                "idCanal": "1",
                "cantidadProducto": "1",
                "descuento": "0.00",
                "enganche": "0.10",
                "idAbono": "00602001",
                "montoFinanciar": "2250.00",
                "periodo": "1",
                "plazo": "48",
                "precio": "2500.00",
                "sku": "151515",
                "sobrePrecio": "1712.00",
                "idSucursal": "100",
                "idTipoCliente": "3",
                "tipoProducto": "TL",
                "idTipoPromocion": "0",
                "ultimoPago": "61.00",
                "abonoNormal": "83.00",
                "abonoPuntual": "70.00"
            }
        ]
    }
}

Я не знаю, как посылать или перемещать этот в контенте ввода с услугой, которую я стараюсь делать

{
    "origenPeticion": "E",
    "productos": [
        {
            "idTipoProducto": "TL",
            "periodo": 1,
            "sku": 151515,
            "plazos": [
                48
            ],
            "precio": 2500,
            "enganche": 0.10,
            "idTipoCliente": "0",
            "idTipoPromocion": 0,
            "idCanal": 1,
            "idSucursal": 100,
            "idPais": 1,
            "descuentos": [
            ],
            "cantidad": 1
        }
    ]
}

Так что это мой код, реализовав потребление:

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

namespace ApiClaseTole
{
    class AbonoProductos
    {
        public Producto consumirAbonoProducto(String origenPeticion, List productos)
        {

            GeneraToken t = new GeneraToken();
            String token = t.obtenerToken();

            System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; };

            DataContractJsonSerializer inSerializer1 = new DataContractJsonSerializer(typeof(Peticion));
            DataContractJsonSerializer inSerializer2 = new DataContractJsonSerializer(typeof(Producto));

            String url = "https://internal-APIGEE-DEV-com:8080/creditos/v1/abonos";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.ContentType = "application/json";
            request.Method = "POST";
            request.Headers.Add("Authorization", "Bearer " + token);
            request.Headers.Add("x-ismock", "true");

            Peticion peticion = new Peticion();
            peticion.origenPeticion = origenPeticion;
            peticion.productos = productos;           /**/Supongo que aquí debo ver la forma de agregar o de pasarle el arreglo de json** 

            MemoryStream mS = new MemoryStream();
            inSerializer1.WriteObject(mS, peticion);
            mS.Seek(0, SeekOrigin.Begin);
            StreamReader sr = new StreamReader(mS);
            String inStr = sr.ReadToEnd();
            Console.WriteLine("Peticion a enviar: {0}", inStr);
            StreamWriter writer = new StreamWriter(request.GetRequestStream());
            writer.Write(inStr);
            writer.Close();


            WebResponse rb;
            try
            {
                rb = request.GetResponse();
            }
            catch (WebException ex)
            {
                StreamReader reader = new StreamReader(ex.Response.GetResponseStream());
                Console.WriteLine("Error: {0}", reader.ReadToEnd());

                throw new Exception("Error consumiendo el servicio", ex);
            }
            var responseString = new StreamReader(rb.GetResponseStream()).ReadToEnd();
            Console.WriteLine(responseString);
            try
            {
                /*dynamic respuesta = JObject.Parse(responseString);
                return new ObjetoRespuesta()
                {
                 mensaje = respuesta.mensaje,
                 folio = respuesta.folio
                };*/

            }
            catch (SerializationException se)
            {
                throw new Exception("No se pudo deserializar la respuesta");
            }

            return null;
        }
    }
}

Мой класс просьба

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;

namespace ApiClaseTole
{
    [DataContract]
    public class Peticion
    {

        public string origenPeticion { get; set; }

        public List productos { get; set; }
    }
}

Мой класс продукт

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;

namespace ApiClaseTole
{
    [DataContract]
    public class Producto
    {
        public Producto(String idTipoProducto, int periodo, int sku, List plazos, int precio, double enganche, String idTipoCliente, int idTipoPromocion, int idCanal, int idSucursal, int idPais,
        List descuentos, int cantidad)
        {
            this.idTipoProducto = idTipoProducto;
            this.periodo = periodo;
            this.sku = sku;
            this.plazos = plazos;
            this.precio = precio;
            this.enganche = enganche;
            this.idTipoCliente = idTipoCliente;
            this.idTipoPromocion = idTipoPromocion;
            this.idCanal = idCanal;
            this.idSucursal = idSucursal;
            this.idPais = idPais;
            this.descuentos = descuentos;
            this.cantidad = cantidad;
        }

        public string idTipoProducto { get; set; }

        public int periodo { get; set; }

        public int sku { get; set; }

        public List plazos { get; set; }

        public int precio { get; set; }

        public double enganche { get; set; }

        public string idTipoCliente { get; set; }

        public int idTipoPromocion { get; set; }

        public int idCanal { get; set; }

        public int idSucursal { get; set; }

        public int idPais { get; set; }

        public List descuentos { get; set; }

        public int cantidad { get; set; }
    }
}

main моей программы, так я этим манипулирую:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using Newtonsoft;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Xml.Linq;
using ApiClaseTole;

namespace ApiClaseTole
{
    public class Program
    {
        static void Main(String[] args)
        {
            AbonoProductos ap = new AbonoProductos();

            List productos = new List();
            productos.Add(new Producto("TL", 1, 151515, new List(new[] { 48 }), 2500, 0.10, "0", 0,1,100,1, new List(new[] {1}), 1));
            Console.WriteLine(productos);
            ap.consumirAbonoProducto("E", productos);
        }
    }
}

Выполнив проект, мне возвращает это ошибка 400, я не могу получать 200,

{
    "codigo": "400.CobranzaCredito-creditos-cotizaciones.1000",
    "mensaje":"Error de datos de entr",
    "folio":  "ip-10-96-10-176.ec2.internal-16292-37036-1",
    "info" :  "https://baz-developer..com.mx/errors#400.-creditos-.1000",
    "detalles": [
    ]
}

introducir la descripción de la imagen aquí

var client = new RestClient("https://internal-.us-.com:8080/cotizaciones/T5/v1/productos/abonos");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Length", "521");
request.AddHeader("Accept-Encoding", "gzip, deflate");
request.AddHeader("Host", "internal-apigee-dev-alb01-616642448.us-east-1.elb.amazonaws.com:8080");
request.AddHeader("Postman-Token", "ed275b59-b425-4338-8b5e-8175e9331d2e,d944eb6c-8d6f-47f1-bcd1-e0d0fe8c7bf4");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "*/*");
request.AddHeader("User-Agent", "PostmanRuntime/7.16.3");
request.AddHeader("Authorization", "Bearer B0kA5Y5PAFJIR77G2ysdd82dpy1G");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("undefined", "{\r\n    \"origenPeticion\": \"E\",\r\n    \"productos\": [\r\n        {\r\n            \"idTipoProducto\": \"TL\",\r\n            \"periodo\": 1,\r\n            \"sku\": 151515,\r\n            \"plazos\": [\r\n                48\r\n            ],\r\n            \"precio\": 2500,\r\n            \"enganche\": 0.10,\r\n            \"idTipoCliente\": \"0\",\r\n            \"idTipoPromocion\": 0,\r\n            \"idCanal\": 1,\r\n            \"idSucursal\": 100,\r\n            \"idPais\": 1,\r\n            \"descuentos\": [\r\n            ],\r\n            \"cantidad\": 1\r\n        }\r\n    ]\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

0
задан 03.09.2019, 00:34
1 ответ

Чтобы призывать api ты должен последовательно преобразовывать класс в json, но кроме того тебе будет более легко, если использовать HttpClient.

, использовав класс json.net, которые он снабжает ссылками используя nuget, ты мог бы последовательно преобразовывать Peticion в json, чтобы посылать ее как контент request

Ттпкльент Хетасинк, PostAsync, SendAsync in C#

Пример использования, чтобы делать POST в API

, Анализирует, как sua в коде

 var json = JsonConvert.SerializeObject(entidad);

это - то, что ты посылал, как content в post таких

using (HttpClient client = new HttpClient())
{

    //resto codigo

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "");
    request.Content = new StringContent(json, Encoding.UTF8, "application/json");
    HttpResponseMessage response = await client.SendAsync(request);

 }

он такой, как ты был бы должен посылать последовательно преобразованную информацию

0
ответ дан 11.09.2019, 03:23

Теги

Похожие вопросы