Asp.net core 如何";巢;现有MVC核心站点中的MVC核心应用程序
我正在考虑在开发/调试ASPNET MVC核心站点时构建一个“仪表板”。棘手的是,我希望我自己的仪表板本身就是一个MVC核心站点,我不希望它干扰“父”站点 理想情况下,接线应尽可能简单:Asp.net core 如何";巢;现有MVC核心站点中的MVC核心应用程序,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我正在考虑在开发/调试ASPNET MVC核心站点时构建一个“仪表板”。棘手的是,我希望我自己的仪表板本身就是一个MVC核心站点,我不希望它干扰“父”站点 理想情况下,接线应尽可能简单: app.UseMyDashboard("/somepath"); 这将在这个路径上公开我自己的MVC核心应用程序。与它自己的服务容器一起完成,以避免运行仪表板应用程序所需的任何服务污染父站点 如果可能的话,我希望它是完全独立的。这通常不取决于你怎么做。模块化/微服务应用程序中的正常情况是创建单独的应用程序,这
app.UseMyDashboard("/somepath");
这将在这个路径上公开我自己的MVC核心应用程序。与它自己的服务容器一起完成,以避免运行仪表板应用程序所需的任何服务污染父站点
如果可能的话,我希望它是完全独立的。这通常不取决于你怎么做。模块化/微服务应用程序中的正常情况是创建单独的应用程序,这些应用程序在自己的端口上运行,并使用反向代理(nginx、IIS)将其路由到正确的应用程序 但您也可以使用
UseWhen
进行分支
app.UseWhen(context => context.Request.Path.StartsWith("dashboard"), appBuilder =>
{
// register here branched middlewares etc.
}
但这并不是你想要的,尽管你可能会感兴趣
根据MSDN文档:“区域实际上是应用程序内部的MVC结构”
这允许您拥有完全独立的路由方案和并行结构,以满足您的内部需求。除了一个区域前缀,您可以拥有所有相同的内容。嗨,我想您已经回答了自己的问题。你的建议听起来很好。试试看它是否能解决你的问题。@Monza-不幸的是,它不能。MVC的两个版本会发生冲突,如果您的控制器名称与MVC的名称相同,并且MVC不确定要使用哪些控制器,则路由表会混合在一起,等等。在您的应用程序中有一个“区域”可以独立运行。如果这不起作用,您应该将您的MVC和MVC Core彼此相邻地托管一个enable CORS,以便它们可以相互通信。@GlennFerrie-它们共享相同的MVC选项,共享相同的
服务提供商。他们不是独立的。一个区域实际上只是一组路由。这需要对消费方进行重要的设置。设想一种情况,比如他们在哪里嵌入了自己的仪表板(从外观上看,通过自带剃须刀实现部件)。理想情况下,我们对消费代码的影响是绝对最小的。区域不是我真正想要的,因为它们不是完全独立的。他们使用与“主要”应用程序相同的ServiceProvider
,等等。