【问题标题】:Limit controllers to specific area only仅将控制器限制在特定区域
【发布时间】:2010-04-10 19:07:59
【问题描述】:

我有一个区域,在 AreaRegistration 中我定义了区域中所有控制器所属的命名空间。

context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { controller="Home", action = "Index", id = UrlParameter.Optional },
                new[] { "MySite.Admin.Controllers" }             // Namespaces
            );

即使不匹配该路由,如何防止调用该区域中的控制器。 IE。 /home/index(开头没有“admin”字样)。

示例:

如果一个控制器“MySite.Admin.Controllers.HomeController”属于上面定义的区域根。如果它与路由“Admin/{controller}/{action}/{id}”(最后是“Admin”)不匹配,我想禁止控制器工厂搜索该控制器(即抛出异常)。 所以如果我输入“home/index”(开头没有“Admin”)网站会抛出一个找不到控制器的错误。

希望我已经足够清楚了。

【问题讨论】:

  • 抱歉无法理解您的问题,您能举个例子吗?

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-areas


【解决方案1】:

添加约束以匹配区域!

Here 是一本很好的关于路由约束的读物。

如果您想编写自己的自定义路由约束,请阅读以下内容

http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/01/11/asp-net-mvc-route-constraints.aspx

编辑:

删除默认路由并确保所有内容都限定为区域,然后 home/index 将抛出异常,因为它没有限定为区域。

【讨论】:

  • 这将使我能够检测到最佳匹配路由,但不会禁止控制器工厂在特定区域下查找控制器
  • 我相信删除默认路由会解决问题,但我想知道这是否是一个好习惯?
  • 这绝对不是一个坏习惯,因为您没有从框架中破解任何东西,您只是根据需要配置路由,就是这样! :)
  • 谢谢,这正是我需要的。默认路由匹配并使用区域内的控制器,因为控制器搜索逻辑。这不是框架中最干净但合理的行为。
猜你喜欢
  • 2014-03-12
  • 2023-03-31
  • 2016-10-26
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2014-09-30
相关资源
最近更新 更多