2013-03-24 162 views
2

我目前正试图弄清楚如何更改我的博客的url规则。ASP.Net MVC4自定义路由

现在的网址是/ Blog/Details/1,但我读到这是一个更好的SEO做法,使网址/Blog/Details/Post-Title。我在标记为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> 

在此先感谢您的帮助。

回答

5

在app_start routing.cs首先将这个路由文件:

 routes.MapRoute(
      "Blog", 
      "Blog/{id}", 
      new { controller = "Details", action = "Blog", id=0 } 
     ); 

只要路由引擎找到这条路首先,在博客开头的路线/将被路由到位指示Details和行动Blog


如果您希望专注于一个搜索引擎友好的塞更具描述性的路线,使用这条路线:

 routes.MapRoute(
      "Blog", 
      "Blog/{postid}/{slug}", 
      new { controller = "Details", action = "Blog", id=0, slug="" } 
     ); 

与博客/ {帖子ID}开头的路线将被路由到位指示Details和行动Blog。当您的操作或操作过滤器看到一条将slug留空的路由时,请在数据库中查找并将您的用户重定向到该URL。

所以,如果,例如,你得到像

/Blog/1287 

的路线,你应该将用户重定向到

/Blog/1287/how-to-fix-your-routing-engine 

这种架构非常类似于这样使用的设计。注意,如果你试图去

/questions/15593545/ 

你会发现自己在

/questions/15593545/asp-net-mvc4-custom-routing 

动作方法现在看起来像这样

public ActionResult Blog (int postid, string slug) 
{ 
+0

伟大的东西会发生什么,谢谢先生。 – 2013-03-24 00:23:16

+1

很高兴帮助... – 2013-03-24 00:24:41

+0

你可以扩展一点我应该如何修改我的控制器和实际的链接。我所遇到的问题如上所述正常工作。再次感谢 – 2013-03-24 00:50:50