Search code examples
c#asp.net-mvcasp.net-mvc-4url-routingcustom-url

Custom URL Routing in Asp.Net MVC 4


How can i do like this url (http://www.domain.com/friendly-content-title) in Asp.Net MVC 4.

Note: This parameter is always dynamic. URL may be different: "friendly-content-title"

I try to Custom Attribute but I dont catch this (friendly-content-title) parameters in ActionResult.

Views:

  • Home/Index
  • Home/Video

ActionResult:

    // GET: /Home/        
    public ActionResult Index()
    {
        return View(Latest);
    }

    // GET: /Home/Video        
    public ActionResult Video(string permalink)
    {
        var title = permalink;
        return View();
    }

RouteConfig:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

        routes.MapRoute(
            name: "Video Page",
            url: "{Home}/{permalink}",
            defaults: new { controller = "Home", action = "Video", permalink = "" }
        );

    }

What should I do for catch to url (/friendly-content-title)?


Solution

  • To enable attribute routing, call MapMvcAttributeRoutes during configuration. Following are the code snipped.

         public class RouteConfig
            {
                public static void RegisterRoutes(RouteCollection routes)
                 {
                    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                    routes.MapMvcAttributeRoutes();
                 }
            }
    

    In MVC5, we can combine attribute routing with convention-based routing. Following are the code snipped.

            public static void RegisterRoutes(RouteCollection routes)
             {
              routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
              routes.MapMvcAttributeRoutes();
              routes.MapRoute(
              name: "Default",
              url: "{controller}/{action}/{id}",
              defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
           );
      }
    

    It is very easy to make a URI parameter optional by adding a question mark to the route parameter. We can also specify a default value by using the form parameter=value. here is the full article.