0

WP 2012 の VS Express で HttpWebRequest の非同期に直面しています。私のターゲットは WP 7.1 です。

次のような URL の結果を返すメソッドを書きたいと思います。

public static string GetContentByPass(string link)
    {
        string result = "";
        var request = (HttpWebRequest)WebRequest.Create(
            new Uri(link));
        request.BeginGetResponse(r =>
        {
            var httpRequest = (HttpWebRequest)r.AsyncState;
            var httpResponse = (HttpWebResponse) httpRequest.EndGetResponse(r);

            using (var reader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var response = reader.ReadToEnd();
                Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    result = response;
                }));
            }
        }, request);
        return result;
    }

これを次のように使用します。

result = Util.GetContentByPass("http://google.com");

しかし、結果は常に空です。

何か案が?

ありがとうございました :-)

編集

これが私の解決策です。必要な人に役立つことを願っています:-)

    public static string GetContentFromURL(string url)
    {
        var task = GetResult(url);
        return task.Result;
    }

    private static Task<string> GetResult(string url)
    {
        url = url.Replace("http://","");
        url = "http://" + url;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.UserAgent = "Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
        Task<WebResponse> task = Task.Factory.FromAsync(
                request.BeginGetResponse, asyncResult => request.EndGetResponse(asyncResult), (object)null
            );

        return task.ContinueWith(t => ReadStreamFromResponse(t.Result));
    }

    private static string ReadStreamFromResponse(WebResponse response)
    {
        using (Stream responseStream = response.GetResponseStream())
        using (StreamReader sr = new StreamReader(responseStream))
        {
            //Need to return this response 
            string strContent = sr.ReadToEnd();
            return strContent;
        }
    }
4

1 に答える 1