I am working on a small ASP.NET MVC project at the moment. The project was released a few month ago. But changes should be implemented for usability and SEO reasons now. I decided to use attribute routing to create clean URLs.
At the moment a product page is called by:
hostname.tld/Controller/GetArticle/1234
I defined a new Route like this:
[Route("Shop/Article/{id:int}/{title?}", Name = "GetArticle", Order = 0)]
public ActionResult GetArticle(int id, string title = null) {
// Logic
}
Everything works fine, but because of backwards compatibility and SEO reasons, the old route should be still available. And redirected with HTTP status code 301 to the new URL.
I've heard that it is possible to assign multiple routes to one action, like this:
[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
}
But I have no idea if this is a good solution or how to determine which route was called?
this.ControllerContext.RouteData
possibly. – HendrickControllerContext
I believe. – Hendrick