Почему httpClient.PostAsync Xamarin.Form не содержит данных $ _POST в ответном сообщении? - PullRequest
0 голосов
/ 28 декабря 2018

Я могу отправить с помощью сообщения 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);

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