2016-08-27 17 views
12

Tôi cần trả lại hình ảnh bằng phương thức Nhận API Web. Đoạn mã bên dưới dường như hoạt động tốt ngoại trừ việc tôi nhận được thông báo này trong cửa sổ ImageView của Fiddler, "Phản hồi này được mã hóa, nhưng không yêu cầu phải là một hình ảnh."Cách trả lại hình ảnh bằng API Web Nhận phương thức

public HttpResponseMessage Get() 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.Open)) 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 
     response.Content = new StreamContent(fs); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     return response; 
    } 
} 

tôi thấy kết quả tương tự trong Fiddler với mã này cũng:

public HttpResponseMessage Get() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(); 
    Byte[] b = (GetImageByteArray()); 
    response.Content = new ByteArrayContent(b); 
    response.Content.LoadIntoBufferAsync(b.Length).Wait(); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
    return response; 
} 

tôi nhận được kết quả tương tự nếu tôi sử dụng định dạng .png.

Đánh giá cao sự giúp đỡ của bạn,

+0

Bạn có thể vui lòng cung cấp chi tiết về phương thức GetImageByteArray() không? Bạn cũng chắc chắn rằng hình ảnh mà bạn đang đọc là hình ảnh jpeg/jpg và không phải là hình ảnh định dạng khác? – dotnetstep

Trả lời

21

Nếu tôi hiểu chính xác thì bạn đang yêu cầu cụ thể cho lõi asp.net. Trong ASP.net lõi HttpResponseMessage không phải là một cách để trả lại kết quả cách chúng ta sử dụng để làm trong trang web ASP.net api 2.

Trong lõi asp.net (WEB API) chỉ đơn giản là như thế này.

[HttpGet] 
public IActionResult Get() 
{    
    Byte[] b = System.IO.File.ReadAllBytes(@"E:\\Test.jpg"); // You can use your own method over here.   
    return File(b, "image/jpeg"); 
} 

Lưu ý: Như bạn đã đề cập trong Fiddler, bạn sẽ thấy thông báo như thế này "phản hồi của anh ấy được mã hóa nhưng không được coi là hình ảnh". vì ASP.net lõi xem xét HttpResponseMessage là lớp đơn giản và chuyển đổi thành json hoặc xml.

+0

Vâng, những gì đếm là kết quả cuối cùng. Mã của bạn làm nó rất độc đáo. Heck với HttpResponseMessage. :-) Tôi sẽ đánh dấu nó như một câu trả lời đúng. Cảm ơn nhiều, –

+3

Sẽ tốt hơn nếu sử dụng quá tải phương thức 'File' chấp nhận luồng, bằng cách này bạn không tải ảnh vào bộ nhớ máy chủ trước khi gửi. 'FileStream stream = File.Open (@" E: \\ Test.jpg "); return File (stream, "image/jpeg"); 'hoặc thậm chí dễ dàng hơn:' return PhysicalFile ("@ E: \\ Test.jpg", "hình ảnh/jpg"); 'https://github.com/aspnet/ Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs # L711 – Tseng

Các vấn đề liên quan