2012-01-19 11 views
3

はStackOverflowのが何をするかチェックアウト:MVC3のページURLに 'text slug'を追加するには?

http://stackoverflow.com/questions/8933768/c-sharp-boolean-outside-method-wont-read 

URLは主にSEOの目的のために使用され、最終的なデコレータ、なしで動作します。

私のASP.Net MVC3アプリケーションでこのようなものが欲しいです。

Articleテーブルの場合、私はフィールドSlug nvarchar(1024) not nullを持っています。誰かがリンクを訪問したときに表示されるように、ルーティングエンジンからこれをどのようにプッシュしますか?

I IDが表示され、リンクが最後にスラッグがなくても動作するようにします。私がデータベースのスラッグを変更した場合、IDは記事への唯一のリンクであるため、リンクは引き続き機能します。

明確で短い例が驚異的です。

+0

これは、[nvarchar(2083) 'は[here]のURLに最適なカラムタイプです(http://stackoverflow.com/questions/1159928/what-is-the-best-column-type-for-url ) – stom

答えて

7

これを実行する最善の方法は、URLの2番目の部分であるスラッグをルックアップの仕方に関して無関係なフィールドにすることです。あなたは、有効なIDを持つ無効スラグ(および影響を要求する人々が心配している場合は

public ActionResult Index(int id, string slug) { 
    var article = _repository.GetById<Article>(id); 

    ...... 

    return View(); 
} 

routes.MapRoute(
    "article" 
    "articles/{id}/{slug}", 
    new { controller = "Article", action = "Index", slug = "" } 
); 

、一致するアクション:あなたのルート定義はこのようなものになるだろうこれはSEO上にある可能性があります)、コントローラーのアクションは、記事に対するスラッグを検証し、誤ったスラッグが提供されるたびに301 URLを目的のURLにリダイレクトする追加の操作を行う可能性があります。これは、StackOverflowのやり方です。あなたが質問URLのタイトル部分を変更すると、サイトがあなたをリダイレクトすることがわかります。

+1

これはきれいで簡単なコードです。共有と追加のリダイレクトの提案に感謝します。 :) –

+0

あなたが最初に投稿したときに5分の編集猶予期間が嫌いさらに別の理由は、あなたの投稿はSEOへの影響やリダイレクトまで何も言及しませんでした。 –

+0

@AnthonyShawについては申し訳ありませんが、それは補足事項でした。実際に、元の応答を編集した後、関連する内容を見ました。 upvoteをしてください。 :) –

2

routes.MapRoute("Slugged", "{controller}/{action}/{id}/{slug}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });'

次に、あなたのコールを処理し、アクションのために、idとスラグパラメータの両方を受け入れます。

私は、提供されたスラッグがdatabsaeの実際のレコードのスラッグと一致することを確認します。そうでなければ、301正しいIDとスラッグにリダイレクトします。

-1

最初に経路 "slug"パラメータを宣言し、アクションリンクまたはアクションURLを定義するときに経路値を渡すことができます。 。

関連する問題