2012-11-21 10 views
5

コントローラから現在のurlパラメータを変更する方法はありますか?ページが読み込まれたときに、追加の/異なるパラメータがアドレスバーに表示されますか?URLをコントローラから変更しますか?

は、ここで私はアクション「製品」を持っていると言う、私の意味は次のとおりです。

public ActionResult Product(int productId) 
{ 
    .. 
} 

product/4545/purple-sunglassesは、上記の関数にマップされているように、私はルートをマッピングし、製品名は、実際には無視されますが、私はしたいです製品名が指定されていない場合、製品が検索エンジンに簡単に入ったので、コントローラは、これを追加する必要があることなど

答えて

7

はこちらをご覧:http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

それを行うにはどのように非常に長い説明があります。最後の部分では301-redirectについて説明します。このリダイレクトを使用すると、検索エンジンのクローラに、目的のURLの下にページが見つかるよう指示する必要があります。

URLエンコーディングを忘れずに、いくつかの作業を保存し、より高品質のURLを提供する必要があります。

routes.MapRoute( 
    "ViewProduct", 
    "products/{id}/{productName}", 
    new { controller = "Product", action = "Detail", id = "", productName = "" } 
); 

があなたのコントローラに名前の部分を追加し、それが正しい名前であることを確認します:

があなたのルーティングを設定します。ここでは

は、ブログの記事からいくつかの重要な抜粋です

public ActionResult Detail(int id, string productName) 
{ 
    Product product = IProductRepository.Fetch(id); 

    string realTitle = product.Title; // Add encoding here 

    if (realTitle != urlTitle) 
    { 
     Response.Status = "301 Moved Permanently"; 
     Response.StatusCode = 301; 
     Response.AddHeader("Location", "/Products/" + product.Id + "/" + realTitle); // Or use the UrlHelper here 
     Response.End(); 
    } 

    return View(product); 
} 

更新
URLは明らかに壊れています。この記事ではほとんど同じ機能を説明しています:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx

コメント/新しいリンクのためにStu1986Cに感謝します!

+2

ありがとうございました。ところで、リンクされたコンテンツの重要な部分をあなたの投稿にコピーするのは常に良い習慣です。そのため、明日のリンクが死んでも、ユーザーはあなたの答えに恩恵を与えることができます。また、それはよりアクセスしやすく、答えは人々に見えやすくなります。 – Shimmy

+2

リンクが無効です。ここに新しいものがあります:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx – Stu1986C

+0

答えに新しいリンクが追加されました。ありがとう! –

関連する問題