【问题标题】:Check GetStreamAsync status检查 GetStreamAsync 状态
【发布时间】:2016-08-02 23:38:59
【问题描述】:

通过GetStreamAsync抓图,如何判断状态?

HttpClient OpenClient = new HttpClient();
Stream firstImageStream = OpenClient.GetStreamAsync("imageUrl.jpg").Result;

有时这会产生错误(通常为 403 或 404),我只想跳过处理这些结果。

我能找到的所有内容都说使用StatusCode 属性或IsSuccessStatusCode,但这些似乎只适用于来自GetAsync 的HttpResponseMessage,它没有给我Stream 我需要处理图片。

【问题讨论】:

  • 所有 HttpClient 函数都是异步的是有原因的,如果你不打算使用实际的异步代码,你应该使用 WebClient 并使用它的非异步方法。

标签: c# stream http-status-codes getasync


【解决方案1】:

流没有响应状态代码。您需要先获取 HttpResponseMessage,检查状态码,然后读入流。

HttpClient OpenClient = new HttpClient();
var response = await OpenClient.GetAsync("imageUrl.jpg");
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
    Stream stream = await response.Content.ReadAsStreamAsync();
}

【讨论】:

  • 'System.Threading.Tasks.Task' 不包含“内容”的定义,并且没有扩展方法“内容”接受“系统”类型的第一个参数.Threading.Tasks.Task' 可以找到
  • 您没有等待任务。检查我上面的代码: var response = await OpenClient.GetAsync("imageUrl.jpg");
  • HttpResponseMessageHttpContent 是 Disposable 类,为什么不用using (...) 结构?
  • 为什么不使用IsSuccessStatusCode
  • 对我来说解决方案有效! API 的这种不一致是微软应该改变的。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2022-01-19
相关资源
最近更新 更多