C# API检索图像时无法正确显示图像

C# API检索图像时无法正确显示图像,c#,asp.net,image,C#,Asp.net,Image,嗨,我有一个api的职位,广告图像数据库,并得到图像。当我发布 http://myserver/dynamic/images/569e61e9-d8ab-44ba-b935-1f7eae8ba39d.jpg 它工作正常,获得200 OK响应,但在正文中显示二进制文本,而不是右标题图像/jpeg的图像本身 我浏览了这个论坛,在我的《邮递员》中看到了与拦截器相关的问题 byte[] buffer = null; var id = Guid.Parse(Path.GetFileName(path

嗨,我有一个api的职位,广告图像数据库,并得到图像。当我发布 http://myserver/dynamic/images/569e61e9-d8ab-44ba-b935-1f7eae8ba39d.jpg 它工作正常,获得200 OK响应,但在正文中显示二进制文本,而不是右标题图像/jpeg的图像本身

我浏览了这个论坛,在我的《邮递员》中看到了与拦截器相关的问题

byte[] buffer = null; 
var id = Guid.Parse(Path.GetFileName(path).Split(".")[0]); 
using (var db = new EFContext()) { 
  var imageFromDb = await db.Images.SingleOrDefaultAsync(x => x.Id == id); 
  buffer = imageFromDb.Data; 
} 

if (buffer != null && buffer.Length > 1) { 
  context.Response.ContentLength = buffer.Length;
  context.Response.ContentType = "image/" + Path.GetExtension(path).Replace(".", ""); 
  await context.Response.Body.WriteAsync(buffer, 0, buffer.Length); 
} 
else {
  context.Response.StatusCode = 404; 
} 

在查看了您的代码之后,我发现问题在于您的响应的MIME类型。要提供jpg(jpeg)图像,您需要使用以下MIME类型:

image/jpeg
将代码更新为以下内容,它将正确地提供图像:

byte[] buffer = null; 
var id = Guid.Parse(Path.GetFileName(path).Split(".")[0]); 
using (var db = new EFContext()) { 
  var imageFromDb = await db.Images.SingleOrDefaultAsync(x => x.Id == id); 
  buffer = imageFromDb.Data; 
} 

if (buffer != null && buffer.Length > 1) { 
  context.Response.ContentLength = buffer.Length;
  context.Response.ContentType = "image/jpeg"; 
  await context.Response.Body.WriteAsync(buffer, 0, buffer.Length); 
} 
else {
  context.Response.StatusCode = 404; 
} 
如果您正在寻找一种更具动态性的方法来分配mime类型,那么可以使用类似这样的方法。注意,这还远未完成,只是一个例子:

var fileExtension = Path.GetExtension(path).Replace(".", "");
var mimeType = "image/jpeg";
switch(fileExtension) {
  case "svg":
    mimeType = "image/svg+xml";
  case "png":
    mimeType = "image/png";
  case "jpg":
  case "jpeg":
  case default:
    mimeType = "image/jpeg";
}

//...
context.Response.ContentType = mimeType;
//...

有关MIME类型的更多详细信息,请参阅。

为了更好地为您提供帮助,您可以发布您的请求数据、用于调用API的技术堆栈以及您的代码的最低可行示例吗?这是从sqlite数据库检索图像的一种方法。图像名称为GUId.jpg ex:569e61e9-d8ab-44ba-b935-1f7eae8ba39d.jpg。该api是一个C#codebyte[]缓冲区=null;var id=Guid.Parse(Path.GetFileName(Path.Split)(“.”[0]);使用(var db=new EFContext()){var imageFromDb=wait db.Images.SingleOrDefaultAsync(x=>x.Id==Id);buffer=imageFromDb.Data;}if(buffer!=null&&buffer.Length>1){context.Response.ContentLength=buffer.Length;context.Response.ContentType=“image/”+Path.GetExtension(Path)。替换(“,”);wait context.Response.Body.WriteAsync(buffer,0,buffer.Length);}else context.Response.StatusCode=404;}byte[]buffer=null;var id=Guid.Parse(Path.GetFileName(Path).Split(.“”[0]);使用(var db=new EFContext()){var-imageFromDb=wait db.Images.SingleOrDefaultAsync(x=>x.id==id);buffer=imageFromDb.Data;}如果(buffer!=null&&buffer.Length>1){context.Response.ContentLength=buffer.Length;context.Response.ContentType=“image/”+Path.GetExtension(Path).Replace(“.”,“”);wait context.Response.Body.WriteAsync(buffer,0,buffer.Length);}else context.Response.StatusCode=404;}您是对的,我从图像文件jpg中提取了扩展名,现在它就像一个符咒一样工作,非常感谢并对我延迟回复表示抱歉