如何使用外部api休息?

时间:2019-06-24 12:34:05

标签: rest api xamarin.forms

我需要使用ERP站点中的Rest API,在那里我将列出该站点中的某些项目,但是我找不到任何有用的东西可以帮助我使用

我正在使用json和http客户端执行,但是过程中的错误会识别站点路径

public partial class ProdutoPage : ContentPage
    {
        ListView lv = new ListView();
        public ProdutoPage()
        {
            InitializeComponent();
            iniciar();
        }
        private async void  iniciar()
        {
            //tinyapp API = new tinyapp();

            //var lista = API.ListaCategorias("automacao");


            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("token", "");
            client.BaseAddress = new Uri("https://api.tiny.com.br/api2/pedidos.pesquisa.php/");
            var resp = await client.GetAsync("pedidos.pesquisa.php/");

            if (resp.IsSuccessStatusCode)
            {
                var respStr = await resp.Content.ReadAsStringAsync();
                var l = JsonConvert.DeserializeObject<List<Pedido>>(respStr);
                lv.ItemsSource = l;
            }
        }
    }
}

我需要一个ERP站点请求列表

5 个答案:

答案 0 :(得分:0)

这有效:

var client = new HttpClient();
        client.BaseAddress = new Uri("https://api.tiny.com.br/api2/");
        var parameters = new Dictionary<string, string> { { "token", "0dbffc6cbb412c01a90431f07631c0e00f2889d4" } };
        var encodedContent = new FormUrlEncodedContent(parameters);
        var resp = await client.PostAsync("pedidos.pesquisa.php", encodedContent);

        var respStr = await resp.Content.ReadAsStringAsync();

经过研究,我发现您的API需要POST才能返回数据:

{{1}}

答案 1 :(得分:0)

在ASP.Net中没有错误,但是在xamarim中,它没有使用System.Web.Script.Serialization来启用javascript

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Web;
using System.Web.Script.Serialization;
using System.Xml.Linq;

namespace mia.Webservices
{
    public class TinyAPI
    {
        private const string URL_PEDIDOS = "https://api.tiny.com.br/api2/pedidos.pesquisa.php/";
        private const string URL_OBTER_PEDIDO = "https://api.tiny.com.br/api2/pedido.obter.php/";

        private string parametros = "?formato=json";
        private string token_solucoes = "";
        private string token_automacao = "";


        /// <summary>
        /// ListaPedidos é um método que lista todos os pedidos do Tiny de acordo com os parâmetros data inicial e data final.
        /// </summary>
        public List<Pedido> ListaPedidos(string empresa, string situacao, string data_inicial, string data_final)
        {
            int pagina = 1;
            string token = "";


            if (empresa.Equals("automacao"))
            {
                token = token_automacao;
            }
            else
            {
                if (empresa.Equals("solucoes"))
                {
                    token = token_solucoes;
                }
            }

            HttpClient client = new HttpClient();
            var baseAddress = new Uri(URL_PEDIDOS);
            client.BaseAddress = baseAddress;

            List<Pedido> pedidos = new List<Pedido>();
            HttpResponseMessage response = null;

            if (data_inicial != null && data_inicial != "" && data_final != null && data_final != "")
            {
                response = client.GetAsync(parametros + "&token=" + token + "&dataInicial=" + data_inicial + "&dataFinal=" + data_final + "&situacao=" + situacao).Result;
            }
            else
            {
                response = client.GetAsync(parametros + "&pagina=" + pagina + "&token=" + token).Result;
            }

            string json = response.Content.ReadAsStringAsync().Result;

            Dictionary<string, object> userObject = new JavaScriptSerializer().DeserializeObject(json) as Dictionary<string, object>;

            if (userObject.ContainsKey("retorno"))
            {
                Object meta = userObject["retorno"];

                Dictionary<string, object> dic_meta = (Dictionary<string, object>)meta;

                if (dic_meta.ContainsKey("numero_paginas"))
                {
                    int total_count = (int)dic_meta["numero_paginas"];

                    while (total_count >= pagina)
                    {
                        HttpResponseMessage response_2 = null;

                        if (data_inicial != null && data_inicial != "" && data_final != null && data_final != "")
                        {
                            response_2 = client.GetAsync(parametros + "&token=" + token + "&dataInicial=" + data_inicial + "&dataFinal=" + data_final + "&situacao=" + situacao).Result;
                        }
                        else
                        {
                            response_2 = client.GetAsync(parametros + "&pagina=" + pagina + "&token=" + token).Result;
                        }

                        string json_2 = response_2.Content.ReadAsStringAsync().Result;

                        Dictionary<string, object> userObject_2 = new JavaScriptSerializer().DeserializeObject(json_2) as Dictionary<string, object>;

                        Dictionary<string, object> objetos = (Dictionary<string, object>)userObject_2["retorno"];

                        if (objetos.ContainsKey("pedidos"))
                        {
                            Object[] pedidos_list = (Object[])objetos["pedidos"];

                            foreach (var item in pedidos_list)
                            {
                                Dictionary<string, object> pre_lista_pedidos = (Dictionary<string, object>)item;

                                Dictionary<string, object> list_pedidos = (Dictionary<string, object>)pre_lista_pedidos["pedido"];

                                Pedido pedido = new Pedido();

                                pedido.situacao = (string)list_pedidos["situacao"];
                                pedido.id = (string)list_pedidos["id"];
                                pedido.numero = (string)list_pedidos["numero"];
                                pedido.numero_ecommerce = (string)list_pedidos["numero_ecommerce"];
                                pedido.data_pedido = (string)list_pedidos["data_pedido"];
                                pedido.data_prevista = (string)list_pedidos["data_prevista"];
                                pedido.nome = (string)list_pedidos["nome"];
                                pedido.valor = (string)list_pedidos["valor"].ToString();
                                pedido.id_vendedor = (string)list_pedidos["id_vendedor"];
                                pedido.nome_vendedor = (string)list_pedidos["nome_vendedor"];
                                pedido.codigo_rastreamento = (string)list_pedidos["codigo_rastreamento"];
                                pedido.url_rastreamento = (string)list_pedidos["url_rastreamento"];

                                pedidos.Add(pedido);
                            }
                        }

                        total_count -= 1;
                    }
                }  
            }



            return pedidos;
        }



}

答案 2 :(得分:0)

> var client = new HttpClient();

            client.BaseAddress = new Uri("https://api.tiny.com.br/api2/");
            var resp = client.GetAsync("pedidos.pesquisa.php?token=********&formato=json").Result;

            if (resp.IsSuccessStatusCode)
            {
                var respStr = resp.Content.ReadAsStringAsync().Result;
               var l =  JsonConvert.DeserializeObject<List<Pedido>>(respStr);

                lv.ItemsSource = l;
            }`

这样做是为了找到令牌,但是Json中的一个错误遵循了Pedido列表中json的示例

  {
  "retorno": {
    "status_processamento": 3,
    "status": "OK",
    "pagina": "1",
    "numero_paginas": "1",
    "pedidos": [
      {
        "pedido": {
          "id": 123456,
          "numero": 123456,
          "numero_ecommerce": "12",
          "data_pedido": "01/01/2013",
          "data_prevista": "10/01/2013",
          "nome": "Cliente Teste",
          "valor": "100.25",
          "id_vendedor": "123456",
          "nome_vendedor": "Vendedor Teste",
          "situacao": "Atendido"
        }
      },
      {
        "pedido": {
          "id": 123456,
          "numero": 123458,
          "numero_ecommerce": "15",
          "data_pedido": "01/01/2013",
          "data_prevista": "10/01/2013",
          "nome": "Cliente Teste 3",
          "valor": "50.25",
          "id_vendedor": "",
          "nome_vendedor": "",
          "situacao": "Aberto"
        }
      }
    ]
  }
}

错误Newtonsoft.Json.JsonSerializationException:

pedido班

public class Pedido
{
    public string id { get; set; }
    public string numero { get; set; }
    public string numero_ecommerce { get; set; }
    public string data_pedido { get; set; }
    public string data_prevista { get; set; }
    public string nome { get; set; }
    public string valor { get; set; }
    public string id_vendedor { get; set; }
    public string nome_vendedor { get; set; }
    public string situacao { get; set; }
    public string codigo_rastreamento { get; set; }
    public string url_rastreamento { get; set; }
    public string data_faturamento { get; set; }
    public Cliente cliente { get; set; }
    public List<Produto_Servico> produtos_servicos { get; set; }
}

答案 3 :(得分:0)

我能够读取较小的类别列表

using System;
using System.Collections.Generic;
using System.Text;

namespace MacVendas.Models.API
{
    public class Categoria
    {
        public class Retorno
        {
            public string id { get; set; }
            public string descricao { get; set; }
            public List<object> nodes { get; set; }
        }

        public class RootObject
        {
            public List<Retorno> retorno { get; set; }
        }
    }
}

Produtopagexaml.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using MacVendas.Classes;
//using macvendas.services;
using MacVendas.Models.API;
using Newtonsoft.Json;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace MacVendas.Pages
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class ProdutoPage : ContentPage
    {

        public ProdutoPage()
        {
            InitializeComponent();
            Iniciar();
        }
        private void Iniciar()
        {

            var client = new HttpClient();
            var resp = client.GetAsync("https://api.tiny.com.br/api2/produtos.categorias.arvore.php?token=*****&formato=json").Result;
            string respStr = resp.Content.ReadAsStringAsync().Result;

            Categoria.RootObject ObjPedidotList = new Categoria.RootObject ();
            if (respStr != "")
            {
                ObjPedidotList = JsonConvert.DeserializeObject<Categoria.RootObject>(respStr);
            }
            //Binding listview with server response    
            listviewConacts.ItemsSource = ObjPedidotList.retorno;




        }
    }
    }

produto.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="MacVendas.Pages.ProdutoPage">

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Label Grid.Row="0" Margin="10" Text="JSON Parsing" FontSize="25" />
            <ListView x:Name="listviewConacts" Grid.Row="1" HorizontalOptions="FillAndExpand" HasUnevenRows="True" >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid HorizontalOptions="FillAndExpand" Padding="10">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                            <Label Text="{Binding descricao}" HorizontalOptions="StartAndExpand" Grid.Row="0" TextColor="Blue"  FontAttributes="Bold"/>
                                <!--<Label Text="{Binding numero}" HorizontalOptions="StartAndExpand" Grid.Row="1" TextColor="Orange"  FontAttributes="Bold"/>
                                <Label Text="{Binding valor}" HorizontalOptions="StartAndExpand" Grid.Row="2" TextColor="Gray"  FontAttributes="Bold"/>-->

                                <BoxView HeightRequest="2" Margin="0,10,10,0" BackgroundColor="Gray" Grid.Row="3" HorizontalOptions="FillAndExpand" />
                            </Grid>
                        </ViewCell>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>

</ContentPage>

答案 4 :(得分:0)

Pedidos类

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;

namespace MacVendas.Models.API
{
    public class Pedido
    {
        public class Pedido2
        {
            public string id { get; set; }
            public string numero { get; set; }
            public string numero_ecommerce { get; set; }
            public string data_pedido { get; set; }
            public string data_prevista { get; set; }
            public string nome { get; set; }
            public string valor { get; set; }
            public string id_vendedor { get; set; }
            public string nome_vendedor { get; set; }
            public string situacao { get; set; }
            public string codigo_rastreamento { get; set; }
            public string url_rastreamento { get; set; }
        }

        public class Pedido1
        {
            public string pedido { get; set; }
        }

        public class Retorno
        {
            public string status_processamento { get; set; }
            public string status { get; set; }
            public string pagina { get; set; }
            public string numero_paginas { get; set; }
            public List<Pedido1> pedidos { get; set; }
        }

        public class RootObject
        {
            public Retorno retorno { get; set; }
        }
    }
}