WebRequest不包含' GetResponse'的定义。适用于Windows 10 Universal App

时间:2016-02-25 06:06:35

标签: c# httpwebrequest win-universal-app definition windows-10-universal

我在GitHub上下载了一个控制台应用程序,工作正常。 但我想将此C#控制台应用程序转换为通用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;
        }
    }

基本上我对这3个函数都有错误:

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

这是错误的图像: Image with error: "Does not contain a definition"

有条件的评论: 我在GitHub上读了一些类似的问题,似乎我需要创建一个像this

这样的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()))
{
    // ...
}

提前致谢!

1 个答案:

答案 0 :(得分:2)

在您链接的答案中,有一个评论与实际答案:

  

如果它是Windows应用商店应用(而不是WPF),则没有   WebResponse类中的同步GetResponse方法

你必须在UWP应用程序中使用异步方法,因为他们不再拥有同步cals以提高用户界面性能(不再需要挂起UI,因为它在同一个线程上执行Web请求)< / p>

您的代码应采用

的形式
HttpWebResponse response = await webrequest.GetResponseAsync();

以下是有关async / await以及如何使用它的更多信息:https://msdn.microsoft.com/en-us/library/hh191443.aspx