2017-09-02 35 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" 
}]