2016-03-25 14 views
0

私は現在、私のRouteConfig.csに次のように持っている:私はアクションメソッドに以下を使用しようとしている複数のルート

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

     routes.MapRoute(
      name: "Identity", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Profile", action = "Identity" } 
     ); 

return RedirectToRoute("Identity", new { @id = id }); 

をしかし、それはdoesnの私がFiddlerに確認すると、リクエストが私が現在行っていたのと同じページに戻ってくるのが見えますが、Defaultルートに当たっているようです。たとえURLが同じであっても、必要に応じて他のコントローラにユーザーを強制するために使用したいと考えています。

+1

を作る前に、アイデンティティ1を入れデフォルトのもの? – zgood

+0

@zgoodによると、私の理解は、デフォルトのルート設定は常にルート設定の最後にあるべきです。ルートコンフィギュレーションは一致するコンフィギュレーションを解析するので、それを受け入れ、そのパスにルーティングします。したがって、最初にデフォルト設定を指定すると、常に一致してそのパスにルーティングされます。 –

答えて

2

MVCは、一致が見つかるとすぐにルートの検索を停止します。あなたの場合、それは以下の順序で見えるでしょう:1.)デフォルト2.)アイデンティティ。あなたは同じパターンで特定のルートを作成する場合は、次のコードでそれを達成することができ

routes.MapRoute(
    name: "Identity", 
    url: "Profile/{action}/{id}", 
    defaults: new { controller = "Profile", action = "Identity" } 
); 

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

あなたがに「フォースの」別のコントローラへのユーザーは必要ありません。 RedirectToActionメソッドを使用して、コントローラとアクションをユーザーに提供できるようにすることをお勧めします。

@ thiag0によって提供されるソリューションは機能しません。

return RedirectToAction("Identity", "Profile", new { id = 5 }); 

とあなたのプロフィールコントローラで次のように使用し、必ずパラメータを受け入れることができ

public ActionResult Identity(int id) 
    { 
     return View(); 
    } 

とRouteConfig.cs

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

      routes.MapRoute(
      name: "Identity", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Profile", action = "Identity"} 
      ); 
関連する問題