Я могу отправить с помощью сообщения HttpClient
a PostAsync
в приложении Xamarin Form на сервер Apache, и я получу сообщение обратно.Это работает и хорошо, но ответ говорит, что $_POST
пусто.
$_SERVER['REQUEST_METHOD']
говорит POST
, а count($_POST)
равно 0
.
У меня естьна сервере имеется небольшая форма для проверки отправки POST.
(HTML-теги удалены)
html
form name="postTest" action="https://www.mydomain.tld/" method="POST"
input type="hidden" id="custId" name="custId" value="3487"
input type="submit" value="Test Post"
/form
/html
Это работает в каждом веб-браузере (например, Firefox, Chrome).)
Если я отлаживаю приложение Xamarin и просматриваю JsonString
, я вижу строку JSON.
LoginData loginData = new LoginData
{
Email = Application.Current.Properties["Email"].ToString(),
Password = ((byte[])Application.Current.Properties["Password"]).ByteArrayToHexString()
};
string JsonString = loginData.ToJsonString();
System.Net.Http.StringContent stringContent = new System.Net.Http.StringContent(JsonString, Encoding.UTF8, "application/json");
HttpClient httpClient = new HttpClient();
try
{
using (var httpResponse = await httpClient.PostAsync("https://www.mydomain.tld/", stringContent))
{
if (httpResponse.IsSuccessStatusCode)
{
string response = await httpResponse.Content.ReadAsStringAsync();
if (response == null)
{
}
else if (response == string.Empty)
{
}
else
{
var browser = new WebView();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = response;
browser.Source = htmlSource;
this.Content = browser;
await Task.Delay(30000);
}
}
}
}
catch
{
}
Я протестировал приложение Xamarin под iOS и UWP.Оба имеют одинаковый результат.
PostAsync не имеет данных $ _POST.В WebView -> Отправка формы есть данные $ _POST.
Я не вижу никаких проблем.
Обновление
Теперь у меня есть рабочая версия UWP, но iOS не работает и отправляется как GET-метод?!
НовыйВерсия использует код из .NET: самый простой способ отправить POST с данными и прочитать ответ
var client = new HttpClient();
var pairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Email", Application.Current.Properties["Email"].ToString()),
new KeyValuePair<string, string>("Password", ((byte[])Application.Current.Properties["PublicPassword"]).ByteArrayToHexString())
};
var content = new FormUrlEncodedContent(pairs);
var response = await client.PostAsync("https://www.mydomain.tld/", content);
if (response.IsSuccessStatusCode)
{
var browser = new WebView();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = await response.Content.ReadAsStringAsync();
browser.Source = htmlSource;
this.Content = browser;
await Task.Delay(30000);
}