【发布时间】:2015-06-22 11:52:23
【问题描述】:
我有两条相似的 seo 友好路线去不同的控制器/动作:
routes.MapRoute(
"Locations",
"{controller}/{locationId}/{location}",
new { controller = "Locations", action = "Location", location = UrlParameter.Optional },
new { locationId = @"\d+" }
);
routes.MapRoute(
"News",
"{controller}/{newsId}/{newsTitle}",
new { controller = "News", action = "NewsItem", newsTitle = UrlParameter.Optional },
new { newsId = @"\d+" }
);
如果我交换它们,News 路由会返回 404 错误,反之亦然。我尝试为每个控制器添加一个默认控制器 - 这没有做任何事情。然后我尝试用控制器的实际名称替换 {controller} 。这产生了一个
匹配的路由不包含“控制器”路由值,它 是必需的
错误信息。
以下是每个链接:
@Html.ActionLink(x.newsTitle, "NewsItem", "News", new { newsId = x.newsID, newsTitle = x.newsTitle.ToSeoUrl() },null)
<a href="@Url.Action("Location", "Locations", new { locationId = "1", location = "my-place-name" }, null)"><i class="fa fa-map-marker fa-li red"></i>My Place Name</a>
我通过切换 locationId 和 location 查询字符串元素“修复了它”。好的,它可以工作,但我觉得这不是正确的解决方案。如果我有第三个控制器操作与类似的查询字符串对怎么办?
最后的尝试是让路线更通用:
routes.MapRoute(
"SEO",
"{controller}/{Id}/{Title}",
new { Title = UrlParameter.Optional },
new { Id = @"\d+" }
);
然后我不能通过该操作,我会回到一个对 SEO 不太友好的 URL。
最后我想得到:
- Locations/locationId/my-place-name
- 新闻/newsId/my-news-item
我对 MVC 比较陌生,我确信我缺少一些基本的东西(或者只是愚蠢)。
【问题讨论】:
标签: asp.net-mvc-4 asp.net-mvc-routing