如何在C#MVC中使用Web API Get方法

时间:2019-01-17 17:14:10

标签: c# asp.net-mvc asp.net-web-api

我正在尝试使用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);
    }
  }

1 个答案:

答案 0 :(得分:0)

您首先应该在响应中检查状态代码。 如果它不是NotFound,则没有结果(完成代码的方式)。 但是您的问题可能与以下事实有关:ctx.Employees.ToList<Employee>();的结果在响应完成之前就已经被处置和终止,但是即使那样也会产生DisposedException。 您应该考虑将数据库上下文实例对象添加到具有瞬时生存期的IoC容器中,并且注入对控制器构造函数具有依赖性,因为在操作方法结束时请求不会结束。