5

XAML と C# を使用した Windows 8 プラットフォームで実際に機能するチュートリアルがあります: http://www.tech-recipes.com/rx/1954/get_web_page_contents_in_code_with_csharp/

方法は次のとおりです。

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();

ただし、Windows 8 では、接続を閉じるためのコードである最後の 2 行 (推測) でエラーが検出されました。ただし、接続を閉じなくても問題なく動作しますが、確率はどうなりますか? なぜ接続を閉じる必要があるのですか? そうしないと何がうまくいかないのですか?「接続を閉じる」とはどういう意味ですか?

4

4 に答える 4

3

Windows 8 向けに開発している場合は、非同期メソッドを使用してユーザー エクスペリエンスを向上させることを検討する必要があります。これは、推奨される新しい標準です。コードは次のようになります。

public async Task<string> MakeWebRequest(string url)
{
    HttpClient http = new System.Net.Http.HttpClient();
    HttpResponseMessage response = await http.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}
于 2013-06-14T11:31:56.910 に答える
0

HTTP Client を使用することをお勧めします。Microsoft HTTP クライアントの例

于 2013-06-14T11:32:43.850 に答える
0

たぶんclose()、最新の API で廃止されたのでしょう。これはうまくいくはずです:

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";

using(WebResponse myResponse = myRequest.GetResponse() )
{
    using(StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8)) 
    {
        string result = sr.ReadToEnd();
    }
}

このusingコマンドは、オブジェクトを自動的に破棄します。

webnoob のコメントをハイライトするには:

(OP参照用に)指摘するために、IDisposableを実装するクラスでのみusingを使用できます(この場合は問題ありません)

于 2013-06-14T11:27:58.943 に答える
0
using System.Net;
using System.Net.Http;

var httpClient = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, targetURL);
//message.Headers.Add(....);
//message.Headers.Add(....);

var response = await httpClient.SendAsync(message);
if (response.StatusCode == HttpStatusCode.OK)
{
    //HTTP 200 OK
    var requestResultString = await response.Content.ReadAsStringAsync();
}
于 2013-06-14T11:30:52.407 に答える