我已经创建了一个解决方案,并将四个项目添加到其中 包含三个mvc站点(SiteA,SiteB,SiteC) 和一个通用的核心类库(名称是核心项目)。 现在所有的mvc网站的控制器都被转移到了核心项目。 我将核心项目引用到这些mvc站点。 我尝试在这些网站上注册路线。
站点A:
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:
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" }
);
思泰科:
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" }
);
问题是: 当我访问siteA,以及如何阻止用户访问siteB控制器或SiteC控制器? 我想控制器只能在特殊的命名空间中找到。无法在其他命名空间中搜索。那怎么解决呢?
答案 0 :(得分:0)
您可以创建action filter或custom action filter并在操作或控制器之前使用它。对于此商店名称空间名称和签入过滤器。如果目标操作的命名空间等于命名空间名称,则允许访问。另一种解决方案是使用Area。要生成指向其他区域的链接,必须在routeValues参数中为这些方法显式传递目标区域名称(Linking Between Areas)。