ASP .NET核心路由到外部程序集中的控制器

时间:2017-11-08 04:43:48

标签: c# asp.net-mvc asp.net-core url-routing

这篇关于ASP.NET核心路由的文章: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing

直截了当。我可以指定这样的路线:

app.UseMvc(routes =>
{
   routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

或者我可以使用以下属性标记我的控制器和操作:

[Route("api/[controller]")]
public class TestController : Controller
{
    [HttpGet("{id}")]
    public async Task<string> Get(string id)
    {
        return "test";
    }
}

但是,我尝试将控制器放在带有属性的外部库中,并从我的主服务引用该程序集,当我打入Url时,调用不会路由到控制器。我猜我需要告诉ASP.NET Core扫描哪些程序集,但我不知道如何。我正在使用此网址BTW:http://localhost:5000/api/test/a

2 个答案:

答案 0 :(得分:3)

为了告诉ASP.NET Core应该在哪些程序集中查找控制器,您可以使用名为&#39; Application Parts&#39;的概念。您在问题中发布的网址旁边有一篇文章:

https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-2.0

使用该方法,您甚至可以根据应用程序配置文件中的设置动态加载程序集,从而使用根应用程序集未引用的程序集中的控制器。

答案 1 :(得分:1)

如果你只引用外部程序集但没有明确使用它的类型,程序集将不会被实际加载,并且asp.net核心将没有机会发现其中的控制器。

要强制加载外部程序集并修复问题,您可以使用简单的

更新启动例程
var t = typeof(ExternalController);

其中ExternalController是外部库中的控制器。

相关问题