Asp.net web api 返回带有图像内容的HTTP错误状态代码

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

我正在开发一个可以返回图像的API。如果API中遇到任何错误,尽管我可以发出带有文本内容或根本没有内容的HTTP-500响应(或类似的错误代码),但我需要能够返回图像内容,并在图像本身中表示错误。换句话说,当遇到任何错误时,我创建错误文本的图像表示并返回图像,http状态代码为500-Internal Server error。我使用的是ASP.NETWebAPI,我能够创建一个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>>
HTTP/1.1500内部服务器错误
内容长度:622485
内容类型:image/jpg
服务器:Microsoft HTTPAPI/2.0
日期:2017年7月24日星期一06:44:56 GMT

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

最佳实践(“每个人都这样做”)是返回HTML,内容类型为text/HTML,即使请求的是图像。

您可以访问此网站

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

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;

您可以添加一个错误处理程序(它是全局的),或者在action方法中返回异常处理程序中的映像。谢谢Richard。但不幸的是你没有回答这个问题。我需要知道这种在错误响应中发送图像的方法是否可行。它是否有效:取决于您的客户(我无法对此发表评论)。对于一般的WebAPI(即第三方客户端),我会说这是不好的:通常API使用者是代码使用者,很难从图像中获取数据。谢谢Gino,更新了我的评论。我的坏消息是,我会记下来以备将来使用。