2

我目前正在尝试弄清楚如何更改我的博客的 url 规则。

现在 URL 是 /Blog/Details/1 但我读到制作 URL 是一种更好的 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>

提前感谢您的帮助。

4

1 回答 1

5

将此路由首先放在您的 app_start routing.cs 文件中:

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

只要路由引擎首先找到这条路由,任何以 Blog/ 开头的路由都会被路由到 ContollerDetails和 Action Blog


如果您想要一条更具描述性的路线,专注于 SEO 友好的 slug,请使用以下路线:

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

任何以 Blog/{postid} 开头的路由都将被路由到 ContollerDetails和 Action Blog。当您的操作或操作过滤器看到将 slug 留空的路由时,请在数据库中查找它并将您的用户重定向到该 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)
{
于 2013-03-24T00:13:50.540 回答