2016-11-24 110 views
11

使用asp.net核心Web API,我想有我控制器操作方法返回一个JPEG图像流
在我目前的实现中,浏览器只显示一个json字符串。 我的期望是在浏览器中看到图像。返回JPEG图像的WebAPI

在使用Chrome开发者工具调试我发现,内容类型仍然是

Content-Type:application/json; charset=utf-8

在响应头回来,即使我的代码手动设置内容类型为“image/JPEG” 。

寻找一个解决方案我的Web API是如下

[HttpGet] 
    public async Task<HttpResponseMessage> Get() 
    { 
     var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg"); 
     var stream = new MemoryStream(); 

     image.CopyTo(stream); 
     stream.Position = 0;    
     result.Content = new StreamContent(image); 
     result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
     result.Content.Headers.ContentDisposition.FileName = "random_image.jpeg"; 
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     result.Content.Headers.ContentLength = stream.Length; 

     return result; 
    } 

enter image description here

回答

15

清洁液使用FilestreamResult!

[HttpGet] 
    public async Task<IActionResult> Get() 
    { 
     var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg"); 
     return File(image, "image/jpeg"); 
    } 

解释:
在Asp.Net核心,你必须使用内置文件()方法的控制器内。这将允许您手动设置内容类型。 不要创建并返回HttpResponseMessage,就像你习惯使用Asp.net web api 2一样。它什么也不做,甚至不会抛出错误!

0
[HttpGet("Image/{id}")] 
    public IActionResult Image(int id) 
    { 
     if(id == null){ return NotFound(); } 
     else{ 

      byte[] imagen = "@C:\\test\random_image.jpeg"; 
      return File(imagen, "image/jpeg"); 
     } 
    } 
+1

这不能工作。 – Ben