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);
}
yourSite/shortUrlwill render the post ?Defaultroute matches any url containing between 0 and 4 segments, therefore yourShortUrlwill never be hit. Second, only the last parameter can be markedUrlParameter.Optionalso you need to removeparam = UrlParameter.Optional. Third, your[Route(Name = "ShortUrl")]does nothing since you have not enabled attribute routing.ShortUrlto 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 exampleurl: "Post/{PostName}"(and again locate it before theDefaultroute