0

我有以下 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(); 方法返回一个空字符串。我不确定我是否做错了什么,因为该方法在语法上似乎与我咨询过的所有教程相同。我究竟做错了什么?

4

1 回答 1

1

您将response立即返回 - 即使分配有用值的回调response只会在稍后触发。你了解它是如何BeginGetResponse工作的吗?仔细研究文档和示例是值得的。

如果您确实想在方法完成后立即返回值,为什么要使用异步方法?如果您只有异步方法(例如,您在 Windows Phone 上),那么您应该坚持使用异步方法——不要尝试使其同步。

顺便说一句,吞下这样的异常也是一个非常糟糕的主意——你几乎应该继续,好像一切都好,即使你确实想忽略用户体验方面的错误,你几乎肯定应该记录例外。

此外,当您获取响应时,您应该使用using语句作为WebResponseimplements IDisposable

于 2013-09-22T16:30:27.207 回答