Xamarin как отправить сообщение с моими записями

#api #xamarin #xamarin.forms #httpclient

#API #xamarin #xamarin.forms #httpclient

Вопрос:

Мне нужно заполнить форму входными данными в Xamarin и отправить их на мою страницу API.

Я уже пробовал отправлять данные в «Postman», и он сохранил их правильно, но я хотел бы знать, как отправить их из Xamarin.

Внимание, я могу правильно считывать данные из приложения.

 public class FuelPurchase
{
    public int id { get; set; }
    public string date{ get; set; }
    public int vueltametal { get; set; }
    public int amount{ get; set; }
    public string station{ get; set; }
    public string location{ get; set; }
}
  

И форма, которую вы создаете в Xamarin, такова.

 <Label Text="Fuel Purchase"/>
            <Label Text="Fecha">
            <DatePicker x:Name="Date"/>

            <Label Text="Station"/>
            <Entry x:Name="Station"/>

            <Label Text="Location"/>
            <Entry x:Name="Location"/>

            <Label Text="Amount"/>
            <Entry x:Name="amount" Keyboard="Numeric"/>
  

Комментарии:

1. Postman включает в себя генераторы кода, которые помогут вам начать: Через пользовательский интерфейс: learning.postman.com/docs/sending-requests/… Через SDK: learning.postman.com/docs/developer/code-generators

Ответ №1:

Вот статический класс, который я использую для API. Вы можете изменить URL, чтобы он соответствовал вашему, если у вас есть только один. Обязательно просмотрите его и убедитесь, что все ваши «/» находятся в нужном месте!

 using Newtonsoft.Json;
using System;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using NGJS = System.Text.Json;
using System.Threading.Tasks;

namespace TestBCS
{
    public class RestService
    {
        readonly HttpClient client;

        public RestService()
        {
            client = new HttpClient(new HttpClientHandler
            {
                Proxy = null,
                UseProxy = false
            });
        }

        #region GET
        public async Task<object> RefreshDataAsync(string url, string qs)
        {
            Uri uri = new Uri(string.Format(url, qs));

            HttpResponseMessage response = await client.GetAsync(uri);
            if (response.IsSuccessStatusCode)
            {
                using (var stream = await response.Content.ReadAsStreamAsync())
                {
                    return await NGJS.JsonSerializer.DeserializeAsync<object>(stream);
                }
            }
            //Error Handling here
            return null;
        }
        #endregion

        #region POST


        static void SerializeJsonIntoStream(object value, Stream stream)
        {
            using (var sw = new StreamWriter(stream, new UTF8Encoding(false), 1024, true))
            using (var jtw = new JsonTextWriter(sw) { Formatting = Formatting.None })
            {
                var js = new JsonSerializer();
                js.Serialize(jtw, value);
                jtw.Flush();
            }
        }

        HttpContent CreateHttpContent(object content)
        {
            HttpContent httpContent = null;

            if (content != null)
            {
                var ms = new MemoryStream();
                SerializeJsonIntoStream(content, ms);
                ms.Seek(0, SeekOrigin.Begin);
                httpContent = new StreamContent(ms);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            }

            return httpContent;
        }

        public async Task PostStreamAsync(string url, object content)
        {
            string Url = url;

            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Post, Url))
            using (var httpContent = CreateHttpContent(content))
            {
                request.Content = httpContent;

                using (var response = await client
                    .SendAsync(request, HttpCompletionOption.ResponseHeadersRead)
                    .ConfigureAwait(false))
                {
                    response.EnsureSuccessStatusCode();
                    Debug.WriteLine("Successfully Sent");
                }
            }
        }

        #endregion
    }
}
  

Комментарии:

1. Вы увидите кучу красных строк в Visual Studio, если у вас не загружены пакеты nuget, которые ему нужны, но не волнуйтесь. Вы просто загружаете их с помощью nuget PM, и все будет хорошо. Также проверьте свои разрешения для Интернета и прочего. Оно должно быть включено, но просто чтобы убедиться, поставьте ему чек.

2. Я не уверен, почему я удаляю HttpClient в POST, а не GET … LOL

3. Большое вам спасибо, но как мне сохранить записи как объекты моего класса?

4. Вы создаете новый экземпляр объекта = `FuelPurchase fp = new FuelPurchase() { fp. Дата = Date.Date, fp.Amount = сумма. Текст и т.д…. } Затем отправьте объект в методе Post = RestService. PostStreamAsync (ваш URL здесь, fp)

5. Просто чтобы уточнить, это отправляет его только на вашу конечную точку, оно ничего не сохраняет на устройстве, только где-то на вашем сервере.