0

I want to display of post content with like below url.
http://domainname.com/name-of-post

Please help me to solved this problem with route config.

This is my codes :

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

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

        routes.MapRoute(
            name: "ShortUrl",
            url: "{PostName}",
            defaults: new { controller = "ShortUrl", action = "Post", PostName = UrlParameter.Optional }
            );
    }



    public ActionResult shortaddress(string _postName = "post-name")
    {

        return RedirectToRoute("ShortUrl", new { postName = _postName });
    }

    [Route(Name = "ShortUrl")]
    public ActionResult Post(string postName)
    {
        if (string.IsNullOrEmpty(postName))
            return RedirectToAction("Index", "Home");

        var postData = postsInfo.getPost(postName);


        return View(postData);
    }
3
  • Solve which part ? generating short url part or setting up the routing so that yourSite/shortUrl will render the post ? Commented Sep 26, 2018 at 1:20
  • 1
    First, your Default route matches any url containing between 0 and 4 segments, therefore your ShortUrl will never be hit. Second, only the last parameter can be marked UrlParameter.Optional so you need to remove param = UrlParameter.Optional. Third, your [Route(Name = "ShortUrl")] does nothing since you have not enabled attribute routing. Commented Sep 26, 2018 at 6:23
  • Last, in order for ShortUrl to work, it needs to be first, and it needs a constraint - refer Routing in ASP.NET MVC, showing username in URL. However that will affect performance, so I suggest you change the route definition to include a prefix to uniquely identify it, for example url: "Post/{PostName}" (and again locate it before the Default route Commented Sep 26, 2018 at 6:26

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.