采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束

2023-12-30

我有一条如下所示的路线,理想情况下我希望它匹配:

domain.com/layout/1-slug-is-the-name-of-the-page

        routes.MapRoute(
            "Layout",                                                // Route name
            "layout/{id}-{slug}",                                           // URL with parameters
            new { controller = "Home", action = "Index"}, new {id = @"\d+$"}
        );

但是当我点击该网址时,我不断收到此异常:

参数字典包含 ... 中方法“System.Web.Mvc.ActionResult Index(Int32)”的不可空类型“System.Int32”的参数“id”的空条目。

上面的路线将匹配以下内容:

domain.com/layout/1-slug 或 domain.com/layout/1-slug_permalink

似乎将 ID 与 Slug 分开的连字符引起了问题。


作为处理的第一步,路由模块根据声明的路由执行传入 URL 的模式匹配。这种模式匹配是急切的(所以id将所有连字符添加到最后一个连字符,这标志着整个连字符的开始slug范围)。约束(如“\d+”)在模式匹配后运行。所以让你困惑的是急切的模式匹配正在设置id为无效值,则它会导致约束失败,从而导致整体路由不匹配,因此管道继续尝试将传入请求与集合中的下一个路由匹配。

解决此问题的最佳(例如,最容易理解、非欺骗)方法是将整个段匹配为id和slug参数,然后在控制器中使用正确的正则表达式将该字符串拆分回其id and slug成分。

或者,考虑使用斜杠,如 mxmissile 建议的那样。

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

采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束 的相关文章

随机推荐

  • 需要在ARCORE中播放视频

    正如我们在 ARCore 中所知 我们可以通过单击水平面来检测 3D 对象 而不是 3d 对象 当用户要单击平面时 我需要显示视频 外观和感觉应该与显示的 3D 对象相同 视频应以预览模式显示 而不是 3D 对象 在 ARcore 中 他们
  • OpenGL 中的纹理贴图

    我在使 mipmap 正常工作时遇到了很多麻烦 我使用的是 OpenGL 1 1 并且没有 glu 因此我使用以下纹理启动代码 glGenTextures 1 texname glBindTexture GL TEXTURE 2D texn
  • 错误:无法找到 conda 二进制文件。 Anaconda安装了吗?网状Rstudio [重复]

    这个问题在这里已经有答案了 我通过 Rstudio 安装了 reticulate 现在我想用conda create 但我将 anaconda 安装在另一个目录中 然后是默认目录 如何更改 Rstudio 搜索 anaconda 的目录 E
  • 动态计算字段中的字符数

    我想动态计算表单文本区域字段中的字符 我知道有一个类似的问题 但我想知道它是否可以从某个数字向 0 计数 例如在 Twitter 上写推文时 这段代码可以是 javascript PHP 这对我来说并不重要 这应该可以帮助你 这里有一个tu
  • 如何让discord.py 机器人向非作者的人发送私人/直接消息?

    假设我想制作一个具有 poke 功能的机器人 又名当有人说 poke user 0000 时向用户发送一条说 Boop 的消息 我该怎么做 当我这样做时它工作得很好 bot command pass context True async d
  • 无法读取用户的字符[重复]

    这个问题在这里已经有答案了 在这段代码中 我正在创建一个二叉树 直到用户想要节点数 但是在从用户获取输入时 它在某个地方失败了 struct node createTree struct node root int n char ch st
  • 如何使用 PHP 和 GD 解决字体花饰问题

    我有以下代码可以在图像上打印文本 我还在文本周围添加了一个调试框 然而 我注意到左侧的文本位于 PHP 给我的框之外imagettfbbox 这看起来像是字体花饰的问题 有什么办法可以解释这一点吗 我能算出斜盘起点和实际位置之间的距离吗im
  • 为什么在使用此 xpath 语法时会收到已弃用的警告?

    我正在使用 selenium 打印网页上的所有产品链接 这是我的代码 from selenium webdriver import Chrome driver path PATH r C Users David Desktop Seleni
  • 如何在android中使用sqlite连接表

    我试图找出如何在 Android 应用程序中使用 sqlite 数据库在我的两个表上进行简单的表连接 使用 CursorJoiner 是最简单的方法还是有更简单的方法 在实施中SQLite数据库 http android git kerne
  • Angular CLI 6 未知选项:“--singleRun”

    当我想执行测试时 我可以选择 single run已激活 但升级到 Angular 6 后不再被识别 gt ng test source map false single run no progress browsers ChromeNoS
  • PHP 无法通过 COM 打开 Excel 工作簿

    该代码工作正常 直到到达打开的工作簿行 然后失败
  • 如何创建扩展方法 (F#)? [复制]

    这个问题在这里已经有答案了 如何在 F 中创建扩展方法 例如 如下 C 扩展 public static string Right this string host int index return host Substring host
  • 将 HTML 分成页面,分割长段落

    好吧 我什至不确定这是否可以用我当前的方法来完成 我正在尝试将 HTML 文档的内容放入当前视口大小的页面中 我目前正在通过迭代文档的所有元素并检查它们的顶部偏移量是否在当前页面的边界内来执行此操作 只要不在当前页面的边界内 此偏移量就会成
  • Typescript:是否有一种简单的方法将一种类型的对象数组转换为另一种类型

    所以 我有两节课 Item name string desc string meta string ViewItem name string desc string hidden boolean 我有一个 Item 数组需要转换为 View
  • 实体方面(春季)

    我在定义我的方面时遇到了一些问题 我有一堆实体 我想在其中分析 get methods 所以我编写了以下切入点和方法 Pointcut execution tld myproject data entities get public voi
  • 在运行时创建/修改枚举

    我正在创建一个程序 用户可以选择创建自己的自定义属性 这些属性最终将显示在PropertyGrid 现在我不想搞乱自定义编辑器 所以我只允许原始类型属性 string int double DateTime bool等 PropertyGr
  • 无闪烁文本框

    我的表单上有一个简单的 Winforms 多行文本框 每当我调整文本框的大小或移动文本框时 它的内容就会开始疯狂地闪烁 这看起来非常恶心 甚至可能导致某些用户癫痫发作 有没有办法操纵文本框的重绘过程来消除闪烁 我找到了一个工作解决方案 ht
  • 连接到 SQL Server 2008 的最大并发用户数

    连接到 SQL Server 2008 的最大并发用户数是否有限制 我猜测计算机资源决定了该限制 如果存在 但我也想知道是否存在理论上的限制 我尝试用谷歌搜索答案 但我找到的所有信息都是基于 SQL Server 的早期版本 如果有限制 它
  • 如何在 ASP.NET Core 中重写 HandleUnauthorizedRequest

    我正在将项目迁移到 asp net core 但我一直在迁移控制器的自定义授权属性 这是我的代码 public class CustomAuthorization AuthorizeAttribute public string Url g
  • 采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束

    我有一条如下所示的路线 理想情况下我希望它匹配 domain com layout 1 slug is the name of the page routes MapRoute Layout Route name layout id slu