ASP.NET MVC routing not working

asp.net, asp.net-mvc, asp.net-mvc-4, c#

Solution

Reorder your routes from most specific to less specific. That way the routes for contact and about will come before the seoName route:

routes.MapRoute(
        name: "ContactUs",
        url: "contact",
        defaults: new { controller = "Home", action = "Contact" }
);

routes.MapRoute(
        name: "AboutUs",
        url: "about",
        defaults: new { controller = "Home", action = "About" }
);

routes.MapRoute(
        name: "CategoryDetails",
        url: "{seoName}",
        defaults: new { controller = "Category", action = "Details" }
);

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

With your original order, the urls`~/contact` and `~/about` would always be handled by the seoName route. By reordering them, you make sure they are handled by the proper actions in the `HomeController` and the seoName route will only match a url after the contact and about routes have failed to match.

Problem

My routing is not working properly. I have the following routes defined: ``` routes.MapRoute( name: "CategoryDetails", url: "{seoName}", defaults: new { controller = "Category", action = "Details" } ); routes.MapRoute( name: "ContactUs", url: "contact", defaults: new { controller = "Home", action = "Contact" } ); routes.MapRoute( name: "AboutUs", url: "about", defaults: new { controller = "Home", action = "About" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); ``` When I click on the about us or contact us links then it takes me to the details action method in the category controller. This is the markup for my about us and contact us links: ``` @Html.ActionLink("About", "About", "Home") @Html.ActionLink("Contact", "Contact", "Home") ``` My details action method for the category controller: ``` public ActionResult Details(string seoName) { CategoryViewModel model = categoryTask.Details(seoName); return View(model); } ``` What is wrong with my route configuration?

Original source