如何从mvc 4中的不同视图页面调用web api控制器方法?

时间:2013-08-14 11:56:08

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

如何从mvc4中的其他视图页面调用webapi控制器方法?

这是我的控制器:

/ API / getEmployee的/ 1

    public EmployeeVM GetEmployee(int id)
    {
        using (var db = new WorkerDBContext())
        {
            var model = db.Employee.Find(id);
            if (model != null)
            {
                return model;
            }
            return null;
        }

    }

2 个答案:

答案 0 :(得分:1)

您需要将数据访问代码移动到另一个类(存储库模式非常适合),并且只需从两个控制器中调用该方法。

public class EmployeeRepository
{
     private readonly WorkerDBContext _workerDbContext = new WorkerDBContext();
     public Employee GetEmployee(int id)
     {
          var model = _workerDbContext.Employee.Find(id);
          return model;
     }
}

然后从您的控制器:

private readonly EmployeeRepository _employeeRepository = new EmployeeRepository();

public EmployeeVM GetEmployee(int id)
{
      var employee = _employeeRepository.GetEmployee(id);
      var viewModel = new EmployeeVM { Name = employeeName, ... };
      return viewModel;
}

答案 1 :(得分:0)

我认为正在发生的事情是,您在同一个控制器和WebApi(或REST)服务中有多个GetPutPost等等。请求的动作类型。无论哪种方式,WebApi中的默认路由都没有操作,因此请对您的路线进行此更改:

config.Routes.MapHttpRoute(
    name: "ActionRoute",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouterParameter.Optional }
);

然后以这种方式创建对api控制器的链接/调用:

@Url.RouteUrl("ActionRoute", new {httproute= "", controller = "controller", action = "action"});