2017-03-02 37 views
8

私はASP.NETのWeb API戻りJSONオブジェクト(ASP.NET WebAPIの)

を持っている私は、これはJSON配列ですが、私がする必要が理解できるようにそれはこの

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

のように私にJSONを返します代わりにこのよう

のJSONオブジェクトを返すこと:{"results":[{"CompanyID":1,"CompanyName":"Тест"},{"CompanyID":5,"CompanyName":"Фокстрот"}]}ここ

は私のGetCompaniesコントローラです:

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; 
    } 
} 

コントローラの変更方法を教えてください。

感謝の

+0

IEnumberable'は無意味であり、彼らは何の可能な利点を持っていない ''戻っIQuarable'や、ウェブAPIを使用して。リストまたは配列を使用してください。あなたの質問に関しては、結果(あなたの出力)を 'ラップする '必要があります。 – Arrrr

答えて

13

値を返すとき、このようにそれを試してみてください。

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

これは1つのIDに対して機能します。 このパブリックIQueryableの場合 GetCompanies() { return db.Companies; } ' どうすればいいですか? –

+0

GetCompanies()に対する私の編集された回答を参照してください。 –

+0

ありがとうございます –

関連する問題