C#从WebRequest获取数据而不返回值

时间:2013-09-22 16:22:20

标签: c# httpwebrequest webrequest httpwebresponse

我有以下C#方法接受URL作为输入并返回该位置存在的文本数据:

public string GetWebData(string uri)
{
    string response = string.Empty;
    try
    {
        var request = WebRequest.Create(uri);
        request.BeginGetResponse(result =>
        {
            var httpRequest = (HttpWebRequest)result.AsyncState;
            var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(result);

            using (var reader = new StreamReader(httpResponse.GetResponseStream()))
            {
                response = reader.ReadToEnd();
            }
        }, request);
    }
    catch (WebException)
    {
        response = string.Empty;
    }
    return response;
}

但是, reader.ReadToEnd(); 方法返回一个空字符串。我不确定我做错了什么,因为这个方法在语法上似乎与我所咨询过的所有教程完全相同。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您立即返回response - 即使为response指定有用值的回调只会稍后触发。你明白BeginGetResponse是如何运作的吗?值得仔细研究文档和示例。

如果您希望在方法完成后立即返回值,为什么使用异步方法?如果您已经拥有异步方法(例如,您使用的是Windows Phone),那么您应该坚持使用该异步惯用语 - 不要尝试使其同步。

顺便说一下,吞下这样的例外也是一个非常糟糕的主意 - 你几乎永远继续好像一切都好,即使你想要忽略就用户体验而言,这个错误几乎肯定会记录异常。

此外,当您获取回复时,您应使用using语句WebResponse实施IDisposable

相关问题