首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查响应状态后,将RestSharp响应作为流处理吗?

问检查响应状态后,将RestSharp响应作为流处理吗?
EN

Stack Overflow用户
提问于 2015-07-15 23:44:51
回答 2查看 4.5K关注 0票数 7

我必须能够使用RestSharp从Rest中流出大型文件。这样做的标准方法是对请求设置“ResponseWriter”属性:

代码语言:javascript
复制
var client = new RestClient
var request = new RestRequest();
IRestResponse response;
request.ResponseWriter = connectStream => {
  if(response.StatusCode == ResponseStatus.OK)
  {
     CloudStorage.UploadFromStream(connectStream);
  }
  else
  {
     LoggerService.LogErrorFromStream(connectStream);
  }
};
response = client.Execute(request);

我的问题是,“response”对象(包括状态、状态代码、头等)直到 RestSharp要求 ResponseWriter处理完整个流之后才可用。

这似乎违反了直觉,因为用户可能希望根据响应状态更改响应流的处理方式。

在开始处理响应体的流之前,如何获得此状态信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 18:00:34

我认为这在这里之前就有报道了。

看起来他们已发布是对此的一个更新,而方法是使用AdvancedResponseWriter。

代码语言:javascript
复制
var client = new RestClient
var request = new RestRequest();
IRestResponse response;
request.AdvancedResponseWriter = (stream, response) => {
    // Should be able to access response which is an IHttpResponse
};
response = client.Execute(request);

文档。

票数 3
EN

Stack Overflow用户

发布于 2016-10-04 16:21:06

看起来,在调用ResponseWriter之前设置了一些标头,这发生在ProcessResponseStream方法中,还有一些标头是在后面设置的。状态是在调用ResponseWriter之后设置的标头之一。

见代码:RestSharp Http.cs

代码语言:javascript
复制
       private void ExtractResponseData(HttpResponse response, HttpWebResponse webResponse)
        {
            using (webResponse)
            {
#if FRAMEWORK
                response.ContentEncoding = webResponse.ContentEncoding;
                response.Server = webResponse.Server;
                response.ProtocolVersion = webResponse.ProtocolVersion;
#endif
                response.ContentType = webResponse.ContentType;
                response.ContentLength = webResponse.ContentLength;

                Stream webResponseStream = webResponse.GetResponseStream();

#if WINDOWS_PHONE
                if (string.Equals(webResponse.Headers[HttpRequestHeader.ContentEncoding], "gzip", StringComparison.OrdinalIgnoreCase))
                {
                    GZipStream gzStream = new GZipStream(webResponseStream);

                    ProcessResponseStream(gzStream, response);
                }
                else
                {
                    ProcessResponseStream(webResponseStream, response);
                }
#else
                this.ProcessResponseStream(webResponseStream, response);
#endif

                response.StatusCode = webResponse.StatusCode;
                response.StatusDescription = webResponse.StatusDescription;
                response.ResponseUri = webResponse.ResponseUri;
                response.ResponseStatus = ResponseStatus.Completed;
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31443111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档