从一个项目调用控制器到另一个项目

时间:2013-10-04 03:17:57

标签: asp.net-mvc asp.net-mvc-4

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

solution explorer screenshot

3 个答案:

答案 0 :(得分:5)

您可以简单地将您的控制器添加到另一个项目(类lib或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" }
        );

答案 1 :(得分:3)

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

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

并运行另一个项目。

答案 2 :(得分:1)

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

在Stack Overflow上提问时要记住这一点很重要。有时候问问如何解决问题而不是如何完成你想出的解决方案更有利。

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

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