Я пытаюсь создать приложение .net maui, которое может публиковать сообщения на веб-сайте, который я использую для размещения XAMPP/Apache. При использовании блока try catch единственное сообщение об ошибке, которое я получаю, — это сбой соединения, и даже проверка журналов ошибок в xampp показывает, что попытки подключения не было.
Я пробовал добавлять/изменять что-то в файлах .conf, а также менять IP-адрес в URL-адресе, но прогресс 0.
Ниже приведен код моего приложения .net maui.
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace AppSiteTest;
public class ApiService
{
private readonly HttpClient _httpClient;
public ApiService()
{
_httpClient = new HttpClient();
}
//post method used in second clicked event
public async Task<string> SendPostRequestAsync(string url, object data)
{
var jsonData = JsonSerializer.Serialize(data);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
return null;
}
}
public partial class MainPage : ContentPage
{
private readonly ApiService _apiService;
private int rowCount = 0;
private int columnCount = 0;
private string _photoPath;
public string PhotoPath
{
get => _photoPath;
set
{
_photoPath = value;
OnPropertyChanged(nameof(PhotoPath));
}
}
public MainPage()
{
InitializeComponent();
BindingContext = this;
photo_grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(100) });
_apiService = new ApiService();
}
//ignore this clicked event
public async void Button_Clicked(object sender, EventArgs args)
{
if (MediaPicker.Default.IsCaptureSupported)
{
FileResult photo = await MediaPicker.Default.CapturePhotoAsync();
if (photo != null)
{
// save the file into local storage
string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
using Stream sourceStream = await photo.OpenReadAsync();
using FileStream localFileStream = File.OpenWrite(localFilePath);
await sourceStream.CopyToAsync(localFileStream);
if (PhotoPath != null)
{
photo_grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(75) });
columnCount++;
var gridPhoto = new Image
{
Source = PhotoPath,
BackgroundColor = Colors.AliceBlue,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
};
photo_grid.Add(gridPhoto, columnCount, rowCount);
}
PhotoPath = localFilePath;
}
}
}
//attempt to post begins
public async void btn_Post_Clicked(object sender, EventArgs args)
{
upload_status.Text = "Trying to connect";
var url = "http://10.0.2.2/GuppyTown_CISP316/php/submit.php";
var data = new { fname = "John", lname = "Smith", email = "[email protected]", phone = "000-000-0000", tip = "From .net Maui" };
upload_status.Text = "data and url loaded";
try
{
var response = await _apiService.SendPostRequestAsync(url, data);
upload_status.Text = response ?? "No response from server";
}
catch (HttpRequestException httpEx)
{
upload_status.Text = $"Request error: {httpEx.Message} {url}";
}
catch (Exception e)
{
upload_status.Text = $"General error: {e.Message}";
}
}
}
Я успешно подключился к веб-сайту из эмулятора, используя как 10.0.2.2, так и локальный IP-адрес моего компьютера.
Верно ли, что вы имеете в виду следующее: когда вы запускаете систему (на основе Мауи) на своем смартфоне, она выходит из строя?
Я имел в виду, что моя проблема в том, что когда я запускаю свое приложение (на основе Maui) и активирую метод щелчка btn_Post_Clicked, оно должно публиковать данные на моем сайте и добавлять их в базу данных, но это не так. Я могу публиковать сообщения со своего веб-сайта на своем php, но каждый раз, когда я пытаюсь опубликовать сообщение из приложения на основе Мауи, он просто говорит, что соединение не удалось.
Android также требует подключения https, если вы явно не разрешите это.
Это проблема с C#, с PHP, с самим HTTP, с XAMPP?
@Хабиби, ты тестируешь это на реальном устройстве?
@KenLee Во время тестирования я решил все, от брандмауэра до антивируса, но безрезультатно.
@Джейсон Можете ли вы объяснить мне, что это значит, поскольку я хорошо знаю .net maui и android в целом
@NicoHaase Я не совсем уверен, мне кажется, это проблема с http, поскольку я не могу ни подключиться, ни найти источник проблемы.
@Х.А.Х. нет, я использую Android Studio в качестве эмулятора, но я постараюсь получить реальное устройство для тестирования
@Джейсон, это сработало отлично, и теперь мое приложение может публиковать сообщения! На данный момент я добавил заполнитель для ответа, но не могли бы вы добавить ответ, чтобы я мог принять ваш?
Я не знаю, как отметить ответ, но Джейсон помог мне, поскольку в итоге мне пришлось добавить (UsesClearTextTraffic = True) в файл MainApplication.cs, найденный в разделе «Платформы»> «Android», пока я занимаюсь отладкой и тестированием. Спасибо вам всем!
вы пытались подключиться к URL-адресу Chrome в эмуляторе?