我正在尝试使用C#MVC中的Web API Get方法获取员工列表并显示在视图中。但是我的清单空了。我不确定我缺少什么。我指的是该资源http://www.tutorialsteacher.com/webapi/consume-web-api-get-method-in-aspnet-mvc
家庭控制器:
namespace Sample.Controllers
{
public class HomeController : Controller
{
private readonly EmployeeDBEntities _db = new EmployeeDBEntities();
public ActionResult Index()
{
IEnumerable<Employee> employees = null;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:62141/api/");
//HTTP GET
var responseTask = client.GetAsync("employee");
responseTask.Wait();
var result = responseTask.Result;
if (result.IsSuccessStatusCode)
{
var readTask = result.Content.ReadAsAsync<IList<Employee>>();
readTask.Wait();
employees = readTask.Result;
}
else //web api sent error response
{
//log response status here..
employees = Enumerable.Empty<Employee>();
ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
}
}
return View(employees);
}
}
}
Employee API Controller:
namespace Sample.Controllers
{
public class EmployeeController : ApiController
{
public IHttpActionResult GetAllEmployees()
{
IList<Employee> employees = null;
using (var ctx = new EmployeeDBEntities())
{
employees = ctx.Employees.ToList<Employee>();
}
if (employees.Count == 0)
{
return NotFound();
}
return Ok(employees);
}
}
答案 0 :(得分:0)
您首先应该在响应中检查状态代码。
如果它不是NotFound,则没有结果(完成代码的方式)。
但是您的问题可能与以下事实有关:ctx.Employees.ToList<Employee>();
的结果在响应完成之前就已经被处置和终止,但是即使那样也会产生DisposedException。
您应该考虑将数据库上下文实例对象添加到具有瞬时生存期的IoC容器中,并且注入对控制器构造函数具有依赖性,因为在操作方法结束时请求不会结束。