0

Мне нужно передать изображение в ответ json. Вот мой контроллер:Передайте данные с изображением с помощью web api

public IHttpActionResult GetStudents() 
    { 
     var data = db.Students.ToList(); 
     return Ok(data); 
    } 

Этот код, очевидно, возвращает все данные для каждого студента и возвращает столбец student_image как VARBINARY, но мне нужно, чтобы передать в качестве изображения.

я могу вернуть изображение, если это единственное, что должно быть возвращено, а вот код:

public HttpResponseMessage GetStudentImages(string id) 
    { 
     var img = (from s in db.Students select new { s.student_image, s.student_id }).Where(a => a.student_id == id).FirstOrDefault(); 
     var result = new HttpResponseMessage(); 

     if (img == null) 
     { 
      result.StatusCode = HttpStatusCode.NotFound; 
     } 
     else 
     { 
      result.Content = new ByteArrayContent(img.student_image); 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     } 
     return result; 
    } 

Как я могу передать изображение в ответ? Благодарю.

+0

Вы забыли добавить в начале 'else' следующее:' результат = новый HttpResponseMessage (HttpStatusCode.OK); ' –

+0

В GetStudentImages работает правильно. Проблема в том, когда я возвращаю его внутри списка. – seesharp

+0

Внутри списка? –

ответ

0

Следующее вернет список StudentModel, который состоит из свойства Image, которое содержит каждый массив байтов изображений.

public class StudentModel 
{ 
    public string Name { get; set; } 
    public ImageModel Image { get; set; } 
} 

public class ImageModel 
{ 
    public string ContentType { get; private set; } 
    public byte[] Content { get; private set; } 

    public ImageModel(string contentType, byte[] content) 
    { 
     ContentType = contentType; 
     Content = content; 
    } 
} 

public IHttpActionResult GetStudents() 
{ 
    var data = db.Students.Select(
     student => new StudentModel 
     { 
      Name = student.Name, 
      Image = new ImageModel("image/jpeg", student.student_image) 
     } 
    ); 
    return Ok(data); 
}