System. Net .WebException: «Ошибка: ConnectFailure (соединение отклонено)» - PullRequest
0 голосов
/ 02 мая 2020

У меня есть эта страница ниже, я хочу отправить данные с json на мою страницу PHP, чтобы вставить пользователей в базу данных MySQL. но соединение не удалось: «Система. Net .WebException:« Ошибка: ConnectFailure (Соединение установлено) »« Моя страница в 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="fullApp.MainPage">

    <StackLayout Margin="0,30,0,0" Padding="20">
        <Entry x:Name="user" Placeholder="UserName"></Entry>
        <Entry x:Name="pass" Placeholder="Password" ></Entry>
        <Entry x:Name="phone" Placeholder="Phone Number"></Entry>
        <Entry x:Name="gover" Placeholder="Governorate"></Entry>
        <Entry x:Name="city" Placeholder="City"></Entry>
        <Entry x:Name="street" Placeholder="Street"></Entry>
        <Button x:Name="rigister" Clicked="Rigister_Clicked"></Button>
    </StackLayout>

</ContentPage>

Моя страница на cs:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace fullApp
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            pass.IsPassword = true;
        }

        void Rigister_Clicked(object sender, EventArgs e)
        {

            PostJson("http://localhost:3308/test/API/rigister_user.php", new users
            {
                username = user.Text,
                password = pass.Text,
                PhoneNumber = phone.Text,
                Governorate = gover.Text,
                City = city.Text,
                Street = street.Text
            });
            void PostJson(string uri, users postParameters)
            {
                string postData = JsonConvert.SerializeObject(postParameters);
                byte[] bytes = Encoding.UTF8.GetBytes(postData);
                var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentLength = bytes.Length;
                httpWebRequest.ContentType = "text/xml";
                using (Stream requestStream = httpWebRequest.GetRequestStream())
                {
                    requestStream.Write(bytes, 0, bytes.Count());
                }
                var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                if (httpWebResponse.StatusCode != HttpStatusCode.OK)
                {
                    string message = String.Format("POST failed. Received HTTP {0}", httpWebResponse.StatusCode);
                    throw new ApplicationException(message);
                }

            }
        }

    }
        public class users
        {
            public string username { get; set; }
            public string password { get; set; }
            public string PhoneNumber { get; set; }
            public string Governorate { get; set; }
            public string City { get; set; }
            public string Street { get; set; }
        }
}

остановка отладки в этой строке, когда я получаю сообщение об ошибке: «Система. Net .WebException:« Ошибка: ConnectFailure (Соединение отказано) »»:

using (Stream requestStream = httpWebRequest.GetRequestStream())

Страница входа

enter image description here

Страница регистрации

enter image description here

После входа или регистрации

enter image description here

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете использовать HttpClient и сделать его асинхронной функцией:

async Task<string> PostJson(string uri, users postParameters)
{
  string postData = JsonConvert.SerializeObject(postParameters);
  using (var client = new HttpClient());
  var response = await client.PostAsync(uri, new StringContent(postData));
  if (!response.IsSuccessStatusCode) 
  {
     string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
     throw new ApplicationException(message);
  }
  return await response.Content.ReadAsStringAsync();
}

Обновление:

Я знаю, что это не решает вопрос OP, но это гораздо более элегантный способ сделай это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...