31

まったく同じリクエストを複数回送信したいです。たとえば、次のようになります。

HttpClient client = new HttpClient();
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, "http://example.com");

await client.SendAsync(req, HttpCompletionOption.ResponseContentRead);
await client.SendAsync(req, HttpCompletionOption.ResponseContentRead);

リクエストを 2 回送信すると、次のメッセージとともに例外がスローされます。

要求メッセージは既に送信されています。同じリクエスト メッセージを複数回送信することはできません。

もう一度送信できるように、リクエストを「複製」する方法はありますか?

私の実際のコードにはHttpRequestMessage、上記の例よりも多くの変数が設定されています。ヘッダーやリクエスト メソッドなどの変数です。

4

5 に答える 5

24

リクエストを複製するために、次の拡張メソッドを作成しました。

public static HttpRequestMessage Clone(this HttpRequestMessage req)
{
    HttpRequestMessage clone = new HttpRequestMessage(req.Method, req.RequestUri);

    clone.Content = req.Content;
    clone.Version = req.Version;

    foreach (KeyValuePair<string, object> prop in req.Properties)
    {
        clone.Properties.Add(prop);
    }

    foreach (KeyValuePair<string, IEnumerable<string>> header in req.Headers)
    {
        clone.Headers.TryAddWithoutValidation(header.Key, header.Value);
    }

    return clone;
}
于 2013-08-02T10:18:41.610 に答える
0

私の知る限り、HttpClientは、ストリームを使用してデータを送受信する「HttpWebRequest」の単なるラッパーであり、リクエストを再利用することはできませんが、クローンを作成する/これをループにするのは非常に簡単なはずです。

于 2013-08-01T17:29:32.100 に答える