System.Net.Http.HttpClient в [универсальной платформе Windows] не работает должным образом

#c# #uwp #xamarin.uwp

#c# #uwp #xamarin.uwp

Вопрос:

Я написал простой метод получения данных из (онлайн) службы REST:

     public async Task<Object> GetTask()
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://111.111.111.111:8080/");
                HttpResponseMessage result = await client.GetAsync("ABC/CDE/getsomeinfo");
                if (result.IsSuccessStatusCode)
                {
                    //Deserialize
                }
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Error"   ex);
        }

        return null;
    }
 

Всякий раз, когда я запускаю это на UWP, я получаю исключение catch:

Не удалось найти текст, связанный с этим кодом ошибки.

Не удалось установить соединение с сервером

HResult 2147012867

Я пытаюсь подключить своего клиента к restapi во внутренней сети. В формах тот же код работает правильно.

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

1. Вы предоставили своему приложению возможность доступа к локальной сети? ( msdn.microsoft.com/en-us/windows/uwp/packaging /… , privateNetworkClientServer колпачок). Можете ли вы выполнить необработанное соединение TCP-сокета с целевым IP-адресом?

Ответ №1:

Попробуйте это

 HttpResponseMessage response;

public async Task<string> webserviceResponse(string HttpMethod)
{      
    // check internet connection is available or not   

    if (NetworkInterface.GetIsNetworkAvailable() == true)
    {
       // CancellationTokenSource cts = new CancellationTokenSource(2000); // 2 seconds
        HttpClient client = new HttpClient();
        MultipartFormDataContent mfdc = new MultipartFormDataContent();
        mfdc.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
        string GenrateUrl = "your url";

        if (HttpMethod == "POST")
        {
            response = await client.PostAsync(GenrateUrl, mfdc);

        }
        else if (HttpMethod == "PUT")
        {
            response = await client.PutAsync(GenrateUrl, mfdc);
        }
        else if (HttpMethod == "GET")
        {
            response = await client.GetAsync(GenrateUrl);
        }
        var respon = await response.Content.ReadAsStringAsync();
        string convert_response = respon.ToString();
        return convert_response;
    }
    else
    {
        return "0";
    }
}
 

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

1. Я установил возможность подключения к Интернету в Package.appxmanifest и его работе, спасибо

2. установить на какую возможность?