C# ASP.NET MVC 4从另一个控制器调用控制器方法

C# ASP.NET MVC 4从另一个控制器调用控制器方法,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我被这个问题困住了。我有两个控制器,UsersController和HomeController。我正在尝试通过以下操作从另一个控制器HomeController的UsersController调用控制器方法: UsersController usersController = new UsersController(); 但我得到了这个错误:在“CTHRC.Roti.Web.UI.Controllers.UsersController”中生成构造函数存根 我不理解这个错误 这是我的用户控制器

我被这个问题困住了。我有两个控制器,UsersController和HomeController。我正在尝试通过以下操作从另一个控制器HomeController的UsersController调用控制器方法:

UsersController usersController = new UsersController();
但我得到了这个错误:在“CTHRC.Roti.Web.UI.Controllers.UsersController”中生成构造函数存根

我不理解这个错误

这是我的用户控制器:

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using CTHRC.Roti.Domain.Api.Services;
using CTHRC.Roti.Domain.Model;

namespace CTHRC.Roti.Web.UI.Controllers
{
    public class UsersController : ApiController
    {
         protected readonly UsersService UsersService;

        public UsersController(UsersService usersService)
        {
            UsersService = usersService;
        }

        [HttpGet]
        public dynamic Get(int UserId)
        {
            return UsersService.Get(UserId);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;

namespace CTHRC.Roti.Web.UI.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Default/

        public ActionResult Index()
        {
            if (!WebSecurity.IsAuthenticated)
            {
                Response.Redirect("~/account/login");
            }
            UsersController userController = new UsersController();
            return View();

        }

    }
}
这是我的家庭控制器:

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using CTHRC.Roti.Domain.Api.Services;
using CTHRC.Roti.Domain.Model;

namespace CTHRC.Roti.Web.UI.Controllers
{
    public class UsersController : ApiController
    {
         protected readonly UsersService UsersService;

        public UsersController(UsersService usersService)
        {
            UsersService = usersService;
        }

        [HttpGet]
        public dynamic Get(int UserId)
        {
            return UsersService.Get(UserId);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;

namespace CTHRC.Roti.Web.UI.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Default/

        public ActionResult Index()
        {
            if (!WebSecurity.IsAuthenticated)
            {
                Response.Redirect("~/account/login");
            }
            UsersController userController = new UsersController();
            return View();

        }

    }
}
我要怎么做才能解决这个问题?任何帮助都将不胜感激。谢谢我尝试这样做的原因是因为我需要控制器方法中的数据。

您的UsersController没有调用站点所期望的无参数构造函数

您可以这样添加一个:

public UsersController() {
}

否则,必须在调用站点提供UsersService作为参数。

为什么需要实例化UserController?如果您试图将用户发送到那里,可以使用RedirectToActionName、ControllerName。如果您从一个控制器调用一个方法到另一个控制器,我认为您应该重新考虑您的设计。控制器有很多开销和设置工作,不需要重复。拉出两个控制器都要使用的公共代码,并将其移动到一个公共区域,例如帮助器类。此外,您的代码甚至不使用您正在启动的控制器。您的示例是否不完整?我之所以尝试这样做,是因为我试图从另一个控制器中的一个控制器方法获取数据。控制器可以在构造函数中具有参数。这是使用国际奥委会的标准做法。当我执行此操作时,UsersController userController=new UsersControllerUsersService userService会出现两个新错误“UsersService是一种类型,但用作变量”和“预期”用户服务注意,这是对IoC的基本理解。难道你没有其他开发人员拥有最丰富的代码知识吗?您可以执行UsersController userController=new UsersController new UsersService,但这可能会起作用,这在很大程度上取决于项目。@user3723240:这是不合法的。调用构造函数时不能指定参数的类型。那么我如何从另一个控制器调用此控制器方法来获取数据??