ASP.NET MVC 默认路由可通过区域路由访问

2023-11-23

到目前为止(为简洁起见)我在 global.asax 中注册了一条路由,如下所示:

routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
  {
    Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
    DataTokens = rootNamespace
  }); 

其中“rootNamespace”是

var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });

LowercaseRoute 继承自 Route,只是将所有路径设为小写。我也有一个这样注册的区域:

context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
  {
    Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
    DataTokens = adminNamespace
  });

其中 adminNamespace 是另一个命名空间,与默认路由中的想法相同,但具有正确的命名空间。这工作正常,我可以访问如下所示的 URL:

http://example.com/contact  <- default route, "Home" controller
http://example.com/admin/account  <- area route, "Account" controller, default "List" action

问题是这个

http://example.com/admin/home/contact

也有效。在“管理”区域下没有具有“联系”操作的“主”控制器。它从“/contact”中提取正确的页面,但 URL 为“/admin/home/contact”。

有什么办法可以防止这种情况发生吗?

Thanks.


看一下AreaRegistrationContext.MapRoute的代码:

public Route MapRoute(string name, string url, object defaults, object constraints, string[] namespaces) {
    if (namespaces == null && Namespaces != null) {
        namespaces = Namespaces.ToArray();
    }

    Route route = Routes.MapRoute(name, url, defaults, constraints, namespaces);
    route.DataTokens["area"] = AreaName;

    // disabling the namespace lookup fallback mechanism keeps this areas from accidentally picking up
    // controllers belonging to other areas
    bool useNamespaceFallback = (namespaces == null || namespaces.Length == 0);
    route.DataTokens["UseNamespaceFallback"] = useNamespaceFallback;

    return route;
}

特别注意使用命名空间回退token,默认设置为 false。如果您想将搜索限制在该区域的命名空间内,则需要具有类似的逻辑。 (True = 在当前命名空间中搜索控制器,如果失败则搜索所有命名空间。False = 仅搜索当前命名空间。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 默认路由可通过区域路由访问 的相关文章

随机推荐

  • Cakephp 3 带有语言参数的路由

    我正在尝试将 cakephp 2 x 转换为 3 x 我正在使用Router connect 规则 但我尝试将它们转换为范围版本 关于 myold 路由规则 在config routes php我添加了这个 Router defaultRo
  • 测试选择器是否与给定元素匹配

    有什么方法可以测试选择器是否匹配给定的 DOM 元素 最好不使用 Sizzle 等外部库 这是针对一个库的 我想最大限度地减少 核心 库所需的第三方插件的数量 如果它最终需要 Sizzle 我会将其作为插件添加到库中 以供那些想要它启用该功
  • 角度 2 中的材料组件波斯日期选择器

    Angular2 Material 组件有一个 DatePicker 它以默认格式显示日期 并且仅支持将本地更改为 fa IR 如何格式化它以显示波斯日期 以下步骤应该有所帮助 1 在 module ts 中加载所有需要的模块 import
  • 同一级别的多个元素上的框阴影但没有重叠?

    I want to create something like the following screenshot but I can t figure out any z index value for which the shadow d
  • Eclipse:OSGI 首选项与 PreferenceStore

    我正在开发一个 Eclipse 插件 或者实际上是基于 Eclipse 的应用程序的插件 它需要用户输入一些配置 从文档来看 似乎有两种首选 API 一种是org eclipse core runtime preferences 扩展 实施
  • 使用 tidyverse;在组内计算值变化之后和之前的值,为每个唯一的转变生成新变量

    我正在寻找一个整洁宇宙 解决方案可以计算唯一值的出现次数TF在团体内 id在数据数据中tbl When TF我想从那一点开始向前和向后计算变化 这个计数应该存储在一个新变量中PM 以便PM 每个独特的转变都包含正负TF 这个问题类似于我之前
  • Apache POI 3.7 OutOfMemoryError:将大量行写入 xlsx 文件时出现 Java 堆空间

    我需要在 xlsx 文件中写入超过 65000 行的结果集 所以 我尝试使用 Apache POI 3 7 我收到 OutOfMemoryError Java 堆空间 除了增加 JVM 内存之外 我该如何解决这个问题 这似乎并不能解决问题
  • 具有一定确定性的 member/2 代码

    我如何编码最后具有确定性的member 2 元素 目前我正在使用 member X X member X Y member X Y 当我查询以下内容时 member X 1 2 X 1 X 2 No 解释器在返回 2 后继续搜索 因为 还剩
  • 从jsp el中的对象获取布尔属性

    我在 jsp 页面上下文中有以下对象的实例 Class User private boolean isAdmin public boolean isAdmin return isAdmin 如何从 EL 查询 isAdmin 属性 这似乎不
  • Python:如何获得两个连续分布的卷积?

    设 X Y 为 2 个随机变量 概率密度函数为 pdf 1 和 pdf 2 Z X Y 然后通过pdf1和pdf2的卷积给出Z的概率密度函数 由于我们无法处理连续分布 因此我们对连续分布进行描述并对其进行处理 为了找到均匀分布和正态分布的卷
  • 如何在 Laravel 中设置本地时区

    有没有办法在 Laravel 中设置本地时区 In 配置 应用程序 php timezone gt UTC 应该添加什么以便上面的时区值使用本地时区 经过一番研究 偶然发现了以下 PHP 处理方式 userTimezone Auth use
  • 指针向量的迭代器未正确取消引用

    这是我的问题 我有一个std vector
  • malloc() 如何导致 SIGSEGV?

    我的程序中有一个奇怪的错误 在我看来 malloc 导致了 SIGSEGV 据我的理解 这没有任何意义 我正在使用一个名为 simclist 的库来动态列表 这是稍后引用的结构体 typedef struct int msgid int s
  • C# 数据库交互简介

    到目前为止 在我的编程生涯 两年 中 我还没有太多的数据库经验 但我现在工作的公司在他们的产品中广泛使用数据库 我感觉落后了 所以我想知道如何最好地开始学习 C 的数据库交互 我读过有关 LINQ to SQL 和 ADO net 的内容
  • 无法加载文件或程序集“System.Web.Mvc”或其依赖项之一

    我在 Windows 2008 Server 上安装了这个新的 MVC 应用程序 当我运行本地主机时收到以下消息 我已经检查了 Bin 文件夹 并且可以确认 Systems Web MVC 在那里 文件的版本是2 0 50217 0 在 w
  • 将构面标签更改为 ggplot2 中的数学公式

    我想知道如何改变facet数学公式的标签ggplot2 d lt ggplot diamonds aes carat price fill density xlim 0 2 stat binhex na rm TRUE opts aspec
  • 未捕获的类型错误:$(...)[index].hide/show 不是函数

    我正在为我的网站创建 jQuery 搜索脚本 但出现以下错误 Uncaught TypeError index hide is not a function search js 9 Uncaught TypeError index show
  • 来自内容脚本的桌面通知

    我试图从内容脚本显示一个简单的桌面通知代码 但它似乎不起作用 我已在 maifest json 文件中添加了权限 从内容脚本中显示它们是否有限制 您无法直接通过内容脚本显示通知 但是你can通过背景页面向他们展示 Your 清单 js应该看
  • 允许 GridView 与 SliverAppBar 重叠

    我正在尝试从早期的材料设计规范中重现以下示例 开放用于动画演示 到目前为止 我已经能够产生滚动效果 但内容的重叠仍然缺失 我不知道如何正确地做到这一点 import package flutter material dart class H
  • ASP.NET MVC 默认路由可通过区域路由访问

    到目前为止 为简洁起见 我在 global asax 中注册了一条路由 如下所示 routes Add new LowercaseRoute action id new MvcRouteHandler Defaults new RouteV