【问题标题】:Returning HTTP Error Status Code with Image Content返回带有图像内容的 HTTP 错误状态代码
【发布时间】:2017-07-24 09:07:42
【问题描述】:

我正在开发一个可以返回图像的 API。如果在 API 中遇到任何错误,尽管我可以发出带有文本内容或根本没有内容的 HTTP - 500 响应(或类似的错误代码),但我需要能够返回带有错误表示的图像内容图像本身。换句话说,当遇到任何错误时,我会创建错误文本的图像表示并返回图像,http 状态代码为 500 - Internal Server Error。我正在使用 ASP.net Web API,我能够创建一个 HTTP 500 响应,其中包含图像内容和 mime 类型为“image/jpg”。

带有纯文本响应的 Http 500:

HTTP/1.1 500 Internal Server Error
Content-Length: 14
Content-Type: text/plain; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Mon, 24 Jul 2017 06:43:55 GMT

Error Occured!

带有图像内容的 Http 500:

HTTP/1.1 500 Internal Server Error
Content-Length: 622485
Content-Type: image/jpg
Server: Microsoft-HTTPAPI/2.0
Date: Mon, 24 Jul 2017 06:44:56 GMT


<<ImageContent>>

虽然有可能,但我需要知道这种方法是否符合 Web API 的最佳实践。谢谢。

【问题讨论】:

  • 您可以添加一个错误处理程序(它是全局的),或者在操作方法中返回其异常处理程序中的图像。
  • 谢谢理查德。但不幸的是,你没有回答这个问题。我需要知道这种在错误响应中发送图像的方法是否可以
  • 它会起作用吗:取决于您的客户(我无法评论)。对于一般的 WebAPI(即第 3 方客户端),我会说这很糟糕:通常 API 使用者将是代码,并且很难从图像中获取数据。

标签: asp.net-web-api http-status-codes


【解决方案1】:

最佳实践(“每个人都这样做”)是返回带有Content-Type: text/html 的 HTML,即使请求是针对图像的。

【讨论】:

    【解决方案2】:

    您可以参考本站here

    您可以在下面查看共享链接中的一段代码:

    var result = new HttpResponseMessage(HttpStatusCode.OK);
    String filePath = HostingEnvironment.MapPath("~/Images/HT.jpg");
    FileStream fileStream = new FileStream(filePath, FileMode.Open);
    Image image = Image.FromStream(fileStream);
    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Jpeg);
    result.Content = new ByteArrayContent(memoryStream.ToArray());
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
    
    return result;
    

    【讨论】:

    • 感谢 Gino,更新了我的评论。我的坏事我会记下来以备不时之需。
    猜你喜欢
    • 2012-11-14
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2016-08-04
    • 2012-04-23
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多