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_startrouting.csファイルの最初に配置します。

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

ルーティングエンジンがこのルートを最初に検出する限り、Blog/で始まるルートはすべてContollerandActionにルーティングされDetailsますBlog


SEOに適したスラッグに焦点を当てた、より説明的なルートが必要な場合は、次のルートを使用してください。

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

Blog / {postid}で始まるルートはすべて、ContollerandActionにルーティングされDetailsますBlog。1つまたは複数のアクションフィルターがスラッグを空白のままにするルートを検出したら、データベースでそれを検索し、ユーザーをそのURLにリダイレクトします。

たとえば、次のようなルートを取得した場合

/Blog/1287

ユーザーをにリダイレクトする必要があります

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

このアーキテクチャは、SOで使用される設計と非常によく似ています。に行こうとするとどうなるかを観察します

/questions/15593545/

あなたはで自分自身を見つけるでしょう

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

アクションメソッドは次のようになります

public ActionResult Blog (int postid, string slug)
{
于 2013-03-24T00:13:50.540 に答える