0

非同期の HttpWebRequest 呼び出しを行う MVC Web API を作成しています。2 つの異なる例外が発生しています。以下は私が使用している方法です。

最初の例外は、「このストリームはシーク操作をサポートしていません」です。それはresponseStreamで起こっています。

2 番目の例外は、「このストリームではタイムアウトはサポートされていません」であり、これは MemoryStream コンテンツで発生しています。

私は何を間違っていますか?私はググっていますが、実際には解決策が見つかりません。

ありがとう、

ロンダ

ここに画像の説明を入力

ここに画像の説明を入力 private async Task GetHtmlContentAsync(string requestUri, string userAgent, string referrer, bool keepAlive, TimeSpan timeout, bool forceTimeoutWhileReading, string proxy, string requestMethod, string type) { //保持する文字列 Response string output = null;

        //create request object
        var request = (HttpWebRequest)WebRequest.Create(requestUri);
        var content = new MemoryStream();
        request.Method = requestMethod;
        request.KeepAlive = keepAlive;
        request.Headers.Set("Pragma", "no-cache");
        request.Timeout = (Int32)timeout.TotalMilliseconds;
        request.ReadWriteTimeout = (Int32)timeout.TotalMilliseconds;
        request.Referer = referrer;
        request.Proxy = new WebProxy(proxy);
        request.UserAgent = userAgent;

        try
        {
            using (WebResponse response = await request.GetResponseAsync().ConfigureAwait(false))
            {
                using (Stream responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        await responseStream.CopyToAsync(content);
                    }
                }

                var sr = new StreamReader(content);
                output = sr.ReadToEnd();
                sr.Close();
            }
        }
        catch (Exception ex)
        {
            output = string.Empty;
            var message = ("The API caused an exception in the " + type + ".\r\n " + requestUri + "\r\n" + ex);
            Logger.Write(message);
        }

        return output;
    }
4

1 に答える 1

0

追加して問題を修正しました

content.Position = 0

新しい StreamReader 行の前。あとは、GZip 圧縮で動作させるだけです。

ロンダ

于 2013-10-03T19:45:46.420 に答える