如何在现有的MVC Core网站中“嵌套”一个MVC Core应用程序

3

我希望构建一个“仪表盘”,用于开发/调试ASPNET MVC Core网站。棘手的部分是,我希望我的仪表板本身就是一个MVC Core网站,并且我不希望它干扰“父”网站。

理想情况下,连接应该尽可能简单:

app.UseMyDashboard("/somepath");

这将使我的MVC Core应用程序暴露在此路径下。它具有自己的服务容器,以避免使用任何运行仪表板应用程序所需的服务来污染父站点。
如果可能的话,我希望它是完全自包含的。

嗨,我认为你已经回答了自己的问题。你所建议的听起来完全没问题。试一试,看看它是否解决了你的问题。 - Monza
@Monza - 很遗憾,它不行。如果你有同名的控制器,MVC的两个版本会发生冲突,MVC会感到困惑,不确定要使用哪一个,路由表也会混在一起等等。 - ChadT
一个“区域”是您的应用程序中可以独立运行的小部分。如果这不起作用,您应该将MVC和MVC Core相邻地托管,并启用CORS,以便它们可以相互通信。 - Glenn Ferrie
@GlennFerrie - 它们共享相同的MVC选项,它们共享相同的ServiceProvider。它们并不是独立的。一个区域实际上只是一组路由的分组。 - ChadT
2个回答

1

通常情况下,模块化/微服务应用程序的做法是创建单独的应用程序,在其自己的端口上运行,并使用反向代理(nginx、IIS)将其路由到正确的应用程序。

但您也可以使用UseWhen进行分支处理。

app.UseWhen(context => context.Request.Path.StartsWith("dashboard"), appBuilder =>
{
    // register here branched middlewares etc. 
}

但那并不完全是你要求的。

这需要消费方进行重大设置。想象一种情况,比如http://hangfire.io/,他们嵌入了自己的仪表板(看起来是通过引入自己的razor实现部分)。理想情况下,我们对消费代码的影响应该是绝对最小的。 - ChadT

1
你可能对.NET MVC Areas感兴趣。
根据MSDN文档:“区域实际上是应用程序内部的MVC结构”。
这使您可以拥有完全独立的路由方案和平行结构以满足您的内部需求。除了区域前缀,您可以将所有内容都设置为相同。

区域并不完全满足我的要求,因为它们并不是完全独立的。它们与“主”应用程序使用相同的“ServiceProvider”等。 - ChadT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接