ASP .NET Core 路由到外部程序集中的控制器
ASP .NET Core Routing To Controllers in External Assembly
这是一篇关于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 要扫描哪些程序集,但我不知道该怎么做。我正在使用这个 url 顺便说一句:http://localhost:5000/api/test/a.
如果您仅引用外部程序集但 none 其类型被显式使用,程序集将不会被实际加载并且 asp.net 核心将没有机会发现其中的控制器。
要强制加载外部程序集并解决您的问题,您可以使用像
这样简单的东西更新启动例程
var t = typeof(ExternalController);
其中 ExternalController
是您的外部库中的控制器。
为了告诉 ASP.NET Core 它应该在哪些程序集中寻找控制器,您可以使用名为 'Application Parts' 的概念。您在问题中发布的 URL 旁边有一篇文章:
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-2.0
使用该方法,您甚至可以根据应用程序配置文件中的设置动态加载程序集,从而使用根应用程序程序集未引用的程序集中的控制器。请参考以下范例:
public void ConfigureServices(IServiceCollection services)
{
// ...
// load application parts from a non-referenced 'extension' assembly:
var path = @"c:\extensions\CustomController.dll";
var assembly = Assembly.LoadFile(path);
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddApplicationPart(assembly);
// ...
}
这是一篇关于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 要扫描哪些程序集,但我不知道该怎么做。我正在使用这个 url 顺便说一句:http://localhost:5000/api/test/a.
如果您仅引用外部程序集但 none 其类型被显式使用,程序集将不会被实际加载并且 asp.net 核心将没有机会发现其中的控制器。
要强制加载外部程序集并解决您的问题,您可以使用像
这样简单的东西更新启动例程var t = typeof(ExternalController);
其中 ExternalController
是您的外部库中的控制器。
为了告诉 ASP.NET Core 它应该在哪些程序集中寻找控制器,您可以使用名为 'Application Parts' 的概念。您在问题中发布的 URL 旁边有一篇文章:
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-2.0
使用该方法,您甚至可以根据应用程序配置文件中的设置动态加载程序集,从而使用根应用程序程序集未引用的程序集中的控制器。请参考以下范例:
public void ConfigureServices(IServiceCollection services)
{
// ...
// load application parts from a non-referenced 'extension' assembly:
var path = @"c:\extensions\CustomController.dll";
var assembly = Assembly.LoadFile(path);
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddApplicationPart(assembly);
// ...
}