2

変わりたい:

www.testurl.com/sports/blog/1 

スポーツが私の領域、ブログが私のアクション、1 がブログ投稿の ID である場合、次のことを行います。

www.testurl.com/sports/blog/test-title-of-blog

ブログはまだ私のアクションですが、ID は表示されませんが、代わりにブログのタイトル/パーマリンクが表示されます。

このアクションの AreaRegistration は次のとおりです。

context.MapRoute(
                "sports",
                "sports/{action}/{content}",
                new { area = "Sports", controller = "Sports", action = "", content = "" });

現時点での私の行動は次のとおりです。

[HttpGet]
    public ActionResult Blog(string content)
    {
            int contentId;
            if (Int32.TryParse(content, out contentId))
            {
                model = service.GetBlogById(contentId);
            }
            else
            {
                model = service.GetBlogByTitle(content);
            }

            //Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
            return View(model);            
    }

ユーザーはブログの ID だけでなく、タイトルでも検索できますが、ID ではなくタイトルのみを URL バーに表示したいのです。

原因となる継続的なメンテナンスのため、リダイレクト ルールを介してこれを行うことはできません。

  1. コントローラーはこれを行うのに適切な場所ですか? - ID を使用してデータベースからタイトルを取得するまで、タイトルを取得できない場合があることを覚えておいてください

  2. URL を変更してタイトルと ID を表示するにはどうすればよいですか?

4

2 に答える 2

2

ID が数値であり、有効な contentId である場合、RedirectResult を新​​しい Url に返す必要があると思います。

            int contentId;
            if (Int32.TryParse(content, out contentId))
            {
                model = service.GetBlogById(contentId);
                if(model != null)
                {
                    return RedirectResult(/*url using the title*/);
                }
            }
            else
            {
                model = service.GetBlogByTitle(content);
            }

            //Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
            return View(model);

もちろん、それによってサーバーへの別のラウンド トリップが発生しますが、ページ リダイレクトなしでブラウザーの URL を変更する方法を確認できます。また、サイトで公開されているすべての URL で、ID の代わりにタイトルが使用されていることを確認する必要があります。

それが役立つことを願っています。

于 2012-11-26T17:49:14.243 に答える
0

これをざっと読むことをお勧めします。

http://www.domincpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

本当に URL に ID を含めることができず、リダイレクトを行いたくない場合は、URL をスラッグとしてデータベースに保存することが他の唯一のオプションだと思います。

これを行う場合のいくつかのポイント。*

  1. 重複を避けるために、データベース レベルで列に一意の制約を追加します。

  2. この列にデータベース インデックスを作成して、読み取りを高速化します。

だからこのURLで

www.testurl.com/sports/blog/test-title-of-blog

これは、ID の代わりにデータベースに照会する固有のスラッグです。

test-title-of-blog
于 2012-11-26T17:17:39.657 に答える