8

我正在使用带有剃须刀的 Asp.net MVC4。我想知道如何在同一个解决方案中将控制器从一个项目调用到另一个项目。(我是 MVC4 的新手)

解决方案资源管理器截图

4

3 回答 3

5

您可以简单地将控制器添加到另一个项目(类库或 MVC 项目等)。我们有几个共享控制器的项目(webAPI 和 MVC)。我通常对 API 控制器使用区域约束,对 MVC 控制器使用命名空间约束——特别是如果您有一些项目使用的基本 HomeController.cs 之类的东西,并且您只想在一个特定的 MVC 应用程序项目中覆盖它。

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "Common.MVC.Controllers" }
        );
于 2013-10-04T03:29:14.357 回答
4

答案在很大程度上取决于您要解决的具体问题。

在 Stack Overflow 上提问时要记住这一点很重要。有时询问如何解决您的问题比如何完成您提出的解决方案更有益。

如果您的目标是避免代码复制,最简单的答案是添加您的第二个项目作为对第一个项目的引用。访问控制器仍然有点困难,因为您需要正确地实例化它,所以我建议您将希望避免复制到第三个项目的代码抽象化,并让您的两个 MVC 项目调用您的实用程序类已创建。

另一种可能性是您希望您的 Web 服务在保持客户端/服务器关系的同时相互交互。这可以通过在运行第二个 Web 服务项目时创建指向 Visual Studio 选择的端口号的 HTTP Web 请求来实现。.Net 能够做到这一点,但我个人建议使用RestSharp

于 2013-10-04T03:25:36.420 回答
3

您必须分离项目(因为您在本地进行测试),然后运行目标项目并获取地址(如http://localhost:15823/)。之后,在另一个项目的控制器中,使用以下命令:

public ActionResult Index()
{
    return Redirect("http://localhost:15823/");
}

并运行另一个项目。

于 2015-12-04T18:17:05.413 回答