WebRequest не содержит определения GetResponse для универсального приложения Windows 10.

Я загружаю консольное приложение на GitHub и отлично работает. Но я хочу перевести это консольное приложение С# в универсальное приложение Windows 10.

Ошибка в Visual Studio: Web Request does not contain a definition for...

Это код:

        private AccessTokenInfo HttpPost(string accessUri, string requestDetails)
    {

        //Prepare OAuth request 
        WebRequest webRequest = WebRequest.Create(accessUri);
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(requestDetails);

        webRequest.ContentLength = bytes.Length;
        using (Stream outputStream = webRequest.GetRequestStream())
        {
            outputStream.Write(bytes, 0, bytes.Length);
        }
        using (WebResponse webResponse = webRequest.GetResponse())
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AccessTokenInfo));
            //Get deserialized object from JSON stream
            AccessTokenInfo token = (AccessTokenInfo)serializer.ReadObject(webResponse.GetResponseStream());
            return token;
        }
    }

в основном я получаю сообщение об ошибке в этих трех функциях:

webRequest.ContentLength
webRequest.GetRequestStream()
webRequest.GetResponse()

Это изображение ошибки: Изображение с ошибкой: "Не содержит определения"

Дополнительные комментарии: я прочитал несколько похожих проблем на GitHub, и мне кажется, что мне нужно создать AsyncResult, например это

Это ответ на похожий вопрос (я не знаю, как применить это к моей проблеме):

  /**  In case it is a Windows Store App (and not WPF) there is no synchronous GetResponse method in class WebResponse.

 You have to use the asynchronous GetResponseAsync instead, e.g. like this: **/

using (var response = (HttpWebResponse)(await request.GetResponseAsync()))
{
    // ...
}

Заранее спасибо!


person Juan P. Ortiz    schedule 25.02.2016    source источник
comment
Возможный дубликат stackoverflow.com/a/35273153/3956290   -  person Mehrzad Chehraz    schedule 25.02.2016


Ответы (1)


в ответе, который вы связали, есть комментарий с фактическим ответом:

Если это приложение Магазина Windows (а не WPF), в классе WebResponse нет синхронного метода GetResponse.

вам нужно использовать асинхронные методы в приложениях UWP, поскольку они больше не имеют синхронных вызовов для повышения производительности пользовательского интерфейса (больше не висит пользовательский интерфейс, потому что он выполняет веб-запрос в том же потоке)

ваш код должен быть в виде

HttpWebResponse response = await webrequest.GetResponseAsync();

Вот еще немного информации об async/await и о том, как его использовать: https://msdn.microsoft.com/en-us/library/hh191443.aspx

person GeertvdC    schedule 25.02.2016