在asp.net mvc核心上的不同项目中调用另一个控制器

时间:2018-08-17 07:14:20

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

我们试图将旧项目改写为asp.net核心mvc的旧mvc。我们以前附加了另一个mvc项目作为参考,并且可以毫无问题地调用控制器。但是在新的asp.net核心MVC上,它似乎还需要解决

enter image description here

因此webapplication9添加了webapplication1作为参考。并调用金丝雀,但返回404。它适用于旧的mvc。

控制器仅返回纯内容

namespace WebApplication1.Controllers
{
    public class CanaryController : Controller
    {
        public IActionResult Index()
        {
            return Content("Canary");
        }
    }
}

是否需要添加一些部分以使webapplication9能够调用webapplication1控制器?

在旧的MVC 5上,我们只需在URL http://webapplication9/Canary上调用它即可。 在asp.net核心上,它返回404或找不到

1 个答案:

答案 0 :(得分:1)

首先,您的其他项目不应是Web应用程序,而应是普通的PCL。

第二,在引用它之后,您需要告诉ASP.NET Core它应该在那寻找控制器。因此,Application Parts Api存在。

services.AddMvc()
    .AddApplicationPart(typeof(CanaryController).GetTypeInfo().Assembly);

P.S。尽管文档指出应该开箱即用,但在控制器上进行集成测试/单元测试时,仍然需要.AddApplicationPart,至少在ASP.NET Core 2.0中是这种情况