2017-03-02 22 views
8

Tôi có ASP.NET Web APIReturn JSON đối tượng (ASP.NET WebAPI)

Nó trả về cho tôi JSON như thế này

[{"CompanyID":1,"CompanyName":"Тест"},{"CompanyID":5,"CompanyName":"Фокстрот"}]

Như tôi hiểu đây là Json mảng, nhưng tôi cần phải trở về JSON Object thay vì nó

như thế này: {"results":[{"CompanyID":1,"CompanyName":"Тест"},{"CompanyID":5,"CompanyName":"Фокстрот"}]}

đây là bộ điều khiển GetCompanies tôi:

public class GetCompaniesController : ApiController 
{ 
    private ApplicationDbContext db = new ApplicationDbContext(); 

    // GET: api/GetCompanies 
    public IQueryable<Companies> GetCompanies() 
    { 
     return db.Companies; 
    } 

    // GET: api/GetCompanies/5 
    [ResponseType(typeof(Companies))] 
    public async Task<IHttpActionResult> GetCompanies(int id) 
    { 
     Companies companies = await db.Companies.FindAsync(id); 
     if (companies == null) 
     { 
      return NotFound(); 
     } 

     return Ok(companies); 
    } 

    // PUT: api/GetCompanies/5 
    [ResponseType(typeof(void))] 
    public async Task<IHttpActionResult> PutCompanies(int id, Companies companies) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != companies.CompanyID) 
     { 
      return BadRequest(); 
     } 

     db.Entry(companies).State = EntityState.Modified; 

     try 
     { 
      await db.SaveChangesAsync(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!CompaniesExists(id)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return StatusCode(HttpStatusCode.NoContent); 
    } 

    // POST: api/GetCompanies 
    [ResponseType(typeof(Companies))] 
    public async Task<IHttpActionResult> PostCompanies(Companies companies) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Companies.Add(companies); 
     await db.SaveChangesAsync(); 

     return CreatedAtRoute("DefaultApi", new { id = companies.CompanyID }, companies); 
    } 

    // DELETE: api/GetCompanies/5 
    [ResponseType(typeof(Companies))] 
    public async Task<IHttpActionResult> DeleteCompanies(int id) 
    { 
     Companies companies = await db.Companies.FindAsync(id); 
     if (companies == null) 
     { 
      return NotFound(); 
     } 

     db.Companies.Remove(companies); 
     await db.SaveChangesAsync(); 

     return Ok(companies); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      db.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private bool CompaniesExists(int id) 
    { 
     return db.Companies.Count(e => e.CompanyID == id) > 0; 
    } 
} 

Tôi cần phải sửa đổi bộ điều khiển của mình bằng cách nào?

Thank của

+0

Khi sử dụng api web, trở về 'IQuarable' hoặc 'IEnumberable' là vô nghĩa và họ không có lợi thế tốt. Hoặc sử dụng một danh sách hoặc một mảng. Về câu hỏi của bạn, bạn cần phải 'wrap' kết quả (đầu ra của bạn). – Arrrr

Trả lời

13

Khi trả lại một giá trị, hãy thử nó như thế này:

 public IHttpActionResult GetCompanies() 
     { 
      var companies = db.Companies.ToList(); 
      return Ok(new { results = companies }); 
     } 
+0

Đối với một id nó hoạt động. Đối với 'công khai IQueryable GetCompanies() { trả về db.Companies này; } ' Tôi cần làm như thế nào? –

+0

Xem câu trả lời đã chỉnh sửa của tôi cho GetCompanies(). –

+0

Cảm ơn rất nhiều –

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