【问题标题】:Words with hyphen are not recognized in attribute based routing mvc5在基于属性的路由 mvc5 中无法识别带有连字符的单词
【发布时间】:2014-08-01 01:47:45
【问题描述】:

无法匹配少数具有 MVC5 路由属性的 url

路线属性

[Route("{language}/{moviename}-{year:int}-{tracktitle}-movie")]

匹配(两者都有效)

localdomain/English/Transformers-2013-ABC-movie

localdomain/English/Wolf-of-wall-street-2013-ABC-movie

但是当ABC 加上一个单词DEF 作为曲目标题时,它不匹配。

localdomain/English/Transformers-2013-ABC-DEF-movie

【问题讨论】:

  • 你不能在路由匹配中使用正则表达式吗?使用{tracktitle:.*(?:\-movie$)} 或类似的东西可能会起作用。
  • 另一方面,我可能被南希宠坏了......
  • 也许 ;-) 正则表达式引擎无法识别 [Route("{language}/{moviename}-{year:int}-{tracktitle:regex(.*(?:\\-movie $))}")]
  • 我知道您可以创建自定义路由约束,您最好使用自定义正则表达式并将其粘贴在您的路由约束中。
  • 同意,B 计划。想知道当它在电影中正常工作并且不与曲目标题一起工作时出了什么问题?不是bug吗?

标签: c# asp.net asp.net-mvc asp.net-web-api


【解决方案1】:

为什么不用“/”分隔参数,而不是尝试用连字符连接它们。通常连字符是指它是一个单词/相关短语,在您的情况下,它是单独的可区分项

即:[Route("{language}/{moviename}/{year:int}/{tracktitle}/movie")]

编辑:

尝试结合使用全面匹配和正则表达式匹配

[Route("{language}/{moviename}-{year:int}-{*tracktitle:regex(^-movie$)}")]

然后,在您的操作中,从您的曲目标题中删除字符串“-movie”,但它应该允许您使用您的约定

【讨论】:

  • 已经使用 - 连字符作为其他 url,对 seo 分数也有影响吗?
  • 不知道您是否会看到对 seo 的影响是否足以产生影响,请参阅我使用正则表达式和 catch-all 的替代方法进行的编辑
  • 捕获所有不工作。运行时错误 包含多个部分(例如文字部分或参数)的路径段不能包含包罗万象的参数。参数名称:routeTemplate
  • 你在路线的尽头抓到了所有东西吗?该错误通常发生在您尝试将 catch all 放置在路线末端以外的任何地方时
  • 这样使用 [Route("{language:regex(a)}/{moviename}-{year:int}-{*tracktitle:regex(^-movie$)}")]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 2016-05-23
  • 2014-04-15
  • 2016-01-12
  • 1970-01-01
  • 2020-11-20
相关资源
最近更新 更多