【发布时间】:2016-09-21 16:16:09
【问题描述】:
我目前正在开发一个小型 ASP.NET MVC 项目。该项目于几个月前发布。但是现在应该出于可用性和搜索引擎优化的原因进行更改。我决定使用属性路由来创建干净的 URL。
此时产品页面由以下人员调用:
hostname.tld/Controller/GetArticle/1234
我这样定义了一条新的路线:
[Route("Shop/Article/{id:int}/{title?}", Name = "GetArticle", Order = 0)]
public ActionResult GetArticle(int id, string title = null) {
// Logic
}
一切正常,但由于向后兼容性和 SEO 原因,旧路线应该仍然可用。并使用 HTTP 状态代码 301 重定向到新 URL。
我听说可以为一个操作分配多个路线,如下所示:
[Route("Shop/Article/{id:int}/{title?}", Name = "GetArticle", Order = 0)]
[Route("Controller/GetArticle/{id:int}", Name = "GetArticle_Old", Order = 1)]
public ActionResult GetArticle(int id, string title = null) {
// Logic
}
但我不知道这是否是一个好的解决方案或如何确定调用了哪个路由?
【问题讨论】:
-
您使用的是哪个版本的 MVC?您可以通过
this.ControllerContext.RouteData获取路线信息。 -
ASP.NET MVC 4.5.2 ,所以我认为 MVC 5 ,据我所知,早期版本不支持多个 Route 标签。谢谢你,我会检查一下!
-
我问是因为如果你使用 Core MVC,你需要使用依赖注入来获得与
ControllerContext等价的我相信。 -
@stephen.vakil 非常感谢您指出正确的方向!我用你的评论解决了我的问题。如果你想把它写下来作为答案,我会接受;)祝你有美好的一天!
标签: c# asp.net-mvc asp.net-mvc-routing attributerouting