【发布时间】:2017-09-11 12:01:05
【问题描述】:
在 ASP.NET Core 中,我想生成某种 SEO-URL,其中包含条目的 id 以及他的标题。
示例:example.com/News/ViewNews/123-test-news
在 Startup.cs 我定义了以下路线
routes.MapRoute(
name: "SeoNews",
template: "{controller=News}/{action=ViewNews}/{id:int}-{title}"
);
在News-Controller中,存在以下Action
public IActionResult ViewNews(int id, string title) { }
里面的断点给了我空值,所以 id = 0 和 title = null。
打电话
示例:example.com/News/ViewNews/123
给我 id = 123,但标题为空,因为它不在 URL 中。我的重写路由有什么问题?
我定义的其他路线在我的自定义路线之后:
routes.MapRoute(
name: "AreaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "DefaultMVCRoute",
template: "{controller=Dashboard}/{action=Index}/{id?}"
);
编辑
我尝试用斜杠替换连字符,所以路由模板是{controller=News}/{action=ViewNews}/{id:int}/{title}。这完美..不明白为什么。我已经尝试转义连字符,因为它可能与正则表达式中的特殊字符发生冲突,这也不起作用。
使用斜杠作为分隔符对我来说是一个合适的解决方法。但我很想知道这个字符有什么特别之处,它不起作用,所以我重命名了问题标题。
【问题讨论】:
-
您是否在默认路线上方添加了此内容?
-
是的,我在自定义路由之后定义了区域和默认 MVC 路由,并在第一篇文章中添加了他们的代码。
-
如果你尝试
example.com/News/ViewNews/123-testnewsurl 会有什么表现? -
首先,上述路线中的标题是强制性参数,而不是可选参数。其次,您可以使用 * 标记 url 的 slug/remaining(即 {*slug} 以及它之后的所有内容)
标签: c# asp.net-core asp.net-core-mvc asp.net-core-1.1