0

Typically I want the default route used when generating URLs ("backwards" mapping), even if I've added alternate or legacy routes to reach an action ("forwards"):

routes.MapRoute("Legacy", "legacy/home/index",     // want forward-only mapping!
    new { controller = "Home", action = "Index" };
routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

In this case, I'd still want the default route used when I call:

@ActionLink("Index", "Home")                       // generates legacy URLs ;(

In the thread: Routing legacy requests with and without querystring (issue #1), the solution is to add two MapRoute statements for each legacy route, or specify the route name in each ActionLink call.

Is there a way to define a route used only for URL -> Action mapping, not the inverse?

Community
  • 1
  • 1
shannon
  • 8,664
  • 5
  • 44
  • 74

1 Answers1

0

I can't find a way to have the route statements apply only one way, so I installed the IIS URL Rewrite module. This works to rewrite the URL transparently, or 301-redirect it in the case of legacy URLs.

It's a more maintainable solution than editing the global.asax anyway.

shannon
  • 8,664
  • 5
  • 44
  • 74
  • For this problem, server-side redirects (not messing up your code) is probably a good way to go anyways :) – Svish Oct 21 '14 at 13:58