MVC如何限定Controller只能从指定的命名空间去寻找对应的View?

datahandler2 2016-06-06 12:17:43
一个解决方案有三个MVC项目,然后把这三个MVC的 Controllers 类代码抽离到这个解决方案内一个叫Core的类库项目里面。
对应三个MVC项目的命名空间都不一样,
A站对应的命名空间:Core.AWeb.Controllers
对应Global里面注册的路由代码:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "AWebDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Core.AWeb.Controllers" }
);

B站对应的命名空间:Core.BWeb.Controllers

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "BWebDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Core.BWeb.Controllers" }
);

C站对应的命名空间:Core.CWeb.Controllers

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "CWebDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Core.CWeb.Controllers" }
);

===============================
问题来了,当发布部署的时候,实际上A、B、C站内引用的Core类库代码是含有A、B、C站的Controller,这就导致了在A站输入B站Controll和Action竟然可以访问B站内容,但项目是禁止访问的,我的需求是如果限定当前站仅只能从注册命名空间的Controoler去寻找,禁止跨命名空间。。
各位大神如何解决?
...全文
304 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
比如说你买来一个“论坛”的源代码,它原来只是针对一个写死的论坛而设计的。现在你发现原来你需要运行多种论坛,怎么办? 你是不是在源代码中增加一个“论坛名称”参数,然后改造一点点杆件代码,让打开数据库的连接串根据论坛名称而动态产生、让下载资源文件(例如每个论坛展示不同的图片)的目录url根据论坛名称而动态产生,这样简单地改造一下不就行了吗?! 所以这是数据驱动的理念。这里理念升级了之后,就不去死抠什么部署代码了,而是在一个更高、更动态管理的角度去运维了。
masanaka 2016-06-06
  • 打赏
  • 举报
回复
不知道用AREA能解决这个问题不。
  • 打赏
  • 举报
回复
你的前端应该事先注册自己的前端应用。 后端只要是部署了服务组件,就应该可以提供服务。前端在向后端注册自己的会话时,声明自己访问某个应用、以某个单位某个用户身份登录,之后后端就会在相应的对应于“某个应用+某个组织(公司)”的独立的数据库里边去找它的个人身份信息进行授权。而至于说后端已经部署了的功能服务组件,没必要去纠结什么,应该都可以提供服务。大不了是分别计费的模式,而不是纠结什么“A、B、C系统”的模式。 也就是说,这是数据驱动的,而不是用什么代码来驱动的。 由此可见,你们在设计开发 A、B、C系统时,没有考虑到为“不同单位”分别读写独立数据库、独立资源文件目录的情况。而是故意非常幼稚地假设一套软件就是“一锤子买卖”只为一个固定的客户单独开发。结果在现在这类部署上,又来纠结了。 这是一个灾难,是在设计A、B、C系统时就犯下了的一个最低级的错误。将 A、B、C改造为能够按照注册用户的"单位名称不同”而打开不同的数据库、不同的资源文件目录,我相信这不需要1天功夫。关键是程序员没有没有执行力! 所以应该下决心花2、3天时间去改造代码,而不是勉强糊弄过去。
datahandler2 2016-06-06
  • 打赏
  • 举报
回复
没人遇到过?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧