我目前正在尝试弄清楚如何更改博客的网址规则。
现在这些网址是/ Blog / Details / 1,但我读到了制作网址/Blog/Details/Post-Title
是一种更好的SEO做法。我在我的博客数据库中创建了一个额外的字段,标记为FriendlyUrl,当我创建博客条目时,我用破折号( - )替换空格,但现在我不知道如何使我的应用程序正常工作。
我被告知要查看我的global.asx.cs,但这就是我的样子。
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
这是我的控制器代码了解详情
public ActionResult Details(int id = 0)
{
Blog blog = _db.Blogs.Find(id);
if (blog == null)
{
return HttpNotFound();
}
return View(blog);
}
以下是当前用于链接博客条目的链接。
<a href="@Url.Action("Details", "Blog", new { id=item.Id})">@Html.DisplayFor(modelItem => item.Title)</a>
提前感谢您的帮助。
答案 0 :(得分:5)
将此路线放在app_start routing.cs文件中的第一位:
routes.MapRoute(
"Blog",
"Blog/{id}",
new { controller = "Details", action = "Blog", id=0 }
);
只要路由引擎首先找到此路由,任何以Blog /开头的路由都将路由到Contoller Details
和Action Blog
。
如果您想要一个更具描述性的路线,专注于SEO友好的slug,请使用此路线:
routes.MapRoute(
"Blog",
"Blog/{postid}/{slug}",
new { controller = "Details", action = "Blog", id=0, slug="" }
);
以Blog / {postid}开头的所有路由都将路由到Contoller Details
和Action Blog
。当您的操作或操作过滤器看到将子弹留空的路径时,请在数据库中查找并将用户重定向到该URL。
因此,例如,如果您获得类似
的路线/Blog/1287
您应该将用户重定向到
/Blog/1287/how-to-fix-your-routing-engine
这种架构非常类似于SO所使用的设计。观察如果你试图去
会发生什么/questions/15593545/
你会发现自己在
/questions/15593545/asp-net-mvc4-custom-routing
您的Action方法现在看起来像这样
public ActionResult Blog (int postid, string slug)
{