2017-09-02 69 views
3

我有网络API控制器,它让汽车的名单从数据库获取JSON数据和图像

[HttpGet, Route("list")] 
public object List() 
{ 
    var cars = context.Cars.ToList();   
    return Json(cars); 
} 

响应看起来像

[{ 
    "markName": "Chevrolet", 
    "modelName": "Spark EV", 
    "year": 2014, 
    "id": 1 
}, 
{ 
    "markName": "Chevrolet", 
    "modelName": "Volt", 
    "year": 2014, 
    "id": 2 
}] 

另外我有一个功能,通过ID来获得图像

[HttpGet, Route("{id}/photo")] 
     public IActionResult GetPhoto(int id) 
     { 
      string path = "blalblabla" 
      Byte[] b = System.IO.File.ReadAllBytes(path);   
      return File(b, "image/jpeg"); 
     } 

如何在一个请求中获取所有数据(json和图像)?或者我应该以其他方式做到这一点?

+0

这两种作用的方法是不同的路线。您可以创建另一个函数,它将获取JSON值和图像(作为字节流)并将它们存储在单个自定义模型集合中。然后,您可以调用该函数,它将返回您的JSON和图像的字节流。您将需要读取字节并将其转换为您的文件格式。 –

回答

2

您可以创建视图模型来封装所有需要的信息。例如,包含一个url以获取图像以及其他元数据的位置。

public class CarModel { 
    public string markName { get; set; } 
    public string modelName { get; set; } 
    public int year { get; set; } 
    public int id { get; set; } 
    public string photo { get; set; } 
} 

你会则包括一个链接到照片行动

[HttpGet("list")] 
public IActionResult List() { 

    var cars = context.Cars.AsEnumerable(); 
    var models = cars.Select(car => 
          new CarModel { 
           markName = car.markName, 
           modelName = car.modelName, 
           year = car.year, 
           id = car.id, 
           photo = Url.RouteUrl("CarPhoto", new { id = car.id }) 
          }).ToList(); 

    return Ok(models); 
} 

[HttpGet("{id}/photo", Name = "CarPhoto")] 
public IActionResult GetPhoto(int id) { 
    string path = "blalblabla" 
    Byte[] b = System.IO.File.ReadAllBytes(path);   
    return File(b, "image/jpeg"); 
} 

实例响应可能看起来像

[{ 
    "markName": "Chevrolet", 
    "modelName": "Spark EV", 
    "year": 2014, 
    "id": 1, 
    "photo": "cars/1/photo" 
}, 
{ 
    "markName": "Chevrolet", 
    "modelName": "Volt", 
    "year": 2014, 
    "id": 2 
    "photo": "cars/2/photo" 
}]