这篇关于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。
答案 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
是外部库中的控制器。