为什么我从web api得到一个空数组json响应?



我有一个简单的web api项目,我试图使用HttpClient调用(试图从数据库表中获取产品)。我得到一个空数组[]的结果,虽然我已经在我的数据库(sqlServer)中存储了数据。

API:

模型:公共偏类{公共int Id{获取;设置;}公共字符串名称{获取;设置;}公共字符串类别{获取;设置;}public decimal Price {get;设置;}}

控制器:公共类ProductsController: apiconcontroller{private TestAPIContext db = new TestAPIContext();

// GET: api/Products
[ResponseType(typeof(Products))]
public IQueryable<Products> GetProducts()
{
return db.Products;
}
// GET: api/Products/5
[ResponseType(typeof(Products))]
public async Task<IHttpActionResult> GetProduct(int id)
{
Products product = await db.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
// PUT: api/Products/5
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutProduct(int id, Products product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != product.Id)
{
return BadRequest();
}
db.Entry(product).State = EntityState.Modified;
try
{
await db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/Products
[ResponseType(typeof(Products))]
public async Task<IHttpActionResult> PostProduct(Products product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Products.Add(product);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = product.Id }, product);
}
// DELETE: api/Products/5
[ResponseType(typeof(Products))]
public async Task<IHttpActionResult> DeleteProduct(int id)
{
Products product = await db.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
db.Products.Remove(product);
await db.SaveChangesAsync();
return Ok(product);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool ProductExists(int id)
{
return db.Products.Count(e => e.Id == id) > 0;
}
}

HttpClient:

HttpClient client = new HttpClient();客户端。BaseAddress = new Uri("http://localhost:8090/");

// Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("api/Products").Result;
if (response.IsSuccessStatusCode)
{
var products = response.Content.ReadAsStringAsync().Result;
grvProducts.DataSource = products;
}
else
{
MessageBox.Show("Error Code" + 
response.StatusCode + " : Message - " + response.ReasonPhrase);
}

我做错了什么吗?

create action

[Route("~/api/getallproducts")]
public IEnumerable<Products> GetAllProducts()
{
return  db.Products.ToArray();
}

和修复请求

HttpResponseMessage response = client.GetAsync("api/getallProducts").Result;
if (response.IsSuccessStatusCode)
{
var stringData = response.Content.ReadAsStringAsync().Result;
var products = JsonConvert.DeserializeObject<List<Product>>(stringData);
grvProducts.DataSource = products;
}

最新更新