Change your Route definition to not have Post be a parameter.
routes.MapRoute("PostSlugRoute",
"Blog/Post/{postId}/{postSlug}", // Removed the {} around Post
new { controller = "Blog", action = "Post", postId = "", postSlug = "" }
);
And ensure your route is above MVC's Default route.
UPDATE: Updating with exact examples I used
global.asax
routes.MapRoute("PostSlugRoute",
"Blog/Post/{postId}/{postSlug}", // Removed the {} around Post
new { controller = "Blog", action = "Post", postId = "", postSlug = "" }
);
~/Views/Blog/Post.cshtml
@{
Guid id = Guid.Parse("554c78f1-c712-4613-9971-2b5d7ca3e017");
string slug = "another-goos-post";
string title = "Another Goos Post";
}
@Html.ActionLink(title, "Post", new { postId = id, postSlug = slug })