2016-10-07 3 views
0

私はasp.net MVC 5サイトを持っています。私は多くのルートを持っているasp.net MVC - ルートを短縮し、古いルートを無効にします。

- 例えば

http://example.com/places/placename 
http://example.com/home/about 
http://example.com/home/privacy 

最初は動的である - ホームコントローラには約&プライバシー操作に後者の二つだけのポイント。

これはうまくいきますが、すべての '/ home /' URLがルートを指しているようにしたいと思います。例えば

http://example.com/home/privacy 

は、私が(内容の重複がSEOのために悪いです)も、もはや仕事に旧ルートたい

http://example.com/privacy 

を指している必要があります。

前者は実行するのは簡単ですが、古いルートはまだ機能しています。これを扱うエレガントな方法は何ですか?

thx。

+0

についての詳細を知るために、この

[Route("privacy")] public ActionResult Privacy() { return view(); } 

ようRouteConfig.cs

routes.MapMvcAttributeRoutes(); // Add this line 

してからにHomeControllerのアクションメソッドで線の下に書きます:/stackoverflow.com/questions/3337372/asp-net-mvc-removing-controller-name-from-url –

答えて

2

Attribute routingを使用して、これらのアクションメソッドを好みのパターンで飾ることができます。それはあなたのRouteConfigでMapMvcAttributeRoutesを呼び出すことによって有効にする必要がありますルーティング属性を使用するためには

public class HomeController : Controller 
{ 
    [Route("privacy")] 
    public ActionResult Privacy() 
    { 
     return view(); 
    } 
    [Route("about")] 
    public ActionResult About() 
    { 
     return view(); 
    } 
} 

routes.MapMvcAttributeRoutes(); 

別のオプションは、デフォルトルートの定義(順序を登録する前に、ルート定義を指定することですあなたのRouteConfig(伝統的なルーティング手法)のcatch-restデフォルトルート定義の前に特定のルート定義を登録する必要があります

したがって、sp従来のルーティングアプローチでRouteConfig.cs

//register route for about 
routes.MapRoute("about", "about", 
     new { controller = "Home", action = "about" }); 

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

であなたのRegisterRoutes方法でecificルート定義、古い(youtSite/home/about)と新しいルートパターン(yourSite/about)が動作します。 yourSite/aboutだけが必要な場合は、属性ルーティングの方法をお勧めします。

+0

ありがとうございます - これをrouteconfig.csでどうやって行い、/ home/for homeの落ち込みを防ぎますか?/verルートのシオンも同様ですか? – niico

+0

@niicoその情報で答えを更新しました。 – Shyju

1

MVC5の属性ルーティングを使用できます。属性のルーティングを有効にするには、この答えのhttpをチェックMVC5 Attribute Routing

関連する問題