'System.Net.HttpWebRequest'不包含'GetRequestStream'的定义

Hun*_*len 10 c# windows-phone-8

我是C#和Windows手机的新手,我正在尝试创建一个执行JSON请求的小应用程序.我正在关注此帖子中的示例/sf/answers/349216661/

我目前的代码是这样的:

public string login()
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(MY_URL);
    httpWebRequest.ContentType = "text/plain"; 
    httpWebRequest.Method      = "POST";

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
       string text = MY_JSON_STRING;
       streamWriter.Write(text);
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,Visual Studio正在标记GetRequestStream()错误消息:

错误CS1061:'System.Net.HttpWebRequest'不包含'GetRequestStream'的定义,并且没有可以找到接受类型'System.Net.HttpWebRequest'的第一个参数的扩展方法'GetRequestStream'(您是否缺少using指令或装配参考?)

有关为什么会发生这种情况的任何想法?我已经导入了System.Net包.

Pet*_*ene 15

HttpWebRequest在WP8 中没有GetRequestStream或GetRequestStreamAsync.你最好的办法就是创建一个Task并等待它,就像这样:

using (var stream = await Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:正如您所提到的,您是C#的新手,您需要使用您的登录方法异步才能使用await关键字:

public async Task<string> LoginAsync()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

要登录的呼叫者在呼叫时需要使用await关键字:

string result = await foo.LoginAsync();
Run Code Online (Sandbox Code Playgroud)

这是关于这个主题的一个很好的入门:http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx