如何限制特定命名空间中的动作?

时间:2016-06-07 04:05:07

标签: asp.net-mvc asp.net-mvc-4

我已经创建了一个解决方案,并将四个项目添加到其中  包含三个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控制器? 我想控制器只能在特殊的命名空间中找到。无法在其他命名空间中搜索。那怎么解决呢?

1 个答案:

答案 0 :(得分:0)

您可以创建action filtercustom action filter并在操作或控制器之前使用它。对于此商店名称空间名称和签入过滤器。如果目标操作的命名空间等于命名空间名称,则允许访问。另一种解决方案是使用Area。要生成指向其他区域的链接,必须在routeValues参数中为这些方法显式传递目标区域名称(Linking Between Areas)。