2017-01-22 11 views
0

私のルート設定(MVC 5)に問題があります。私は、同じパラメータシグニチャ(同じ量のパラメータとパラメータタイプ)を持つ複数のルートを持っています。MVCルート設定同じURLパラメータの署名

下のコードでは、下の2つの設定は、突き合わせのヘッドです。サーバーへの通常のポストバックは、同じ同じ署名のために、一番下のデフォルトのパスを取得し、代わりに中央のものを取得することになっています。

私は中央のものを一番下のデフォルトのものからユニークにする方法を考え出すことができません。私はまだそれらの2つの文字列(アクションとgameHtmlAbbr)を持つために中間のものが必要です。

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: null, 
      url: "{gameConsoleHtmlAbbr}", 
      defaults: new { Controller = "Game", action = "GameList", gameConsoleHtmlAbbr = (string)null } 
     ); 

     routes.MapRoute(
      name: null, 
      url: "{action}/{gameHtmlAbbr}", 
      defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null } 
     ); 

     routes.MapRoute(
      name: null, 
      url: "{controller}/{action}", 
      defaults: new { controller = "Game", action = "GameList" } 
     ); 
    } 
} 
+1

第2および第3 3つ目は2つのセグメントを持つので、2つのセグメントを持つものはすべて2番目のセグメントに一致します。 Snes/{gameHtmlAbbr}をユニークなものにすることができ、//Snes/someThingは2番目の一致します –

+0

私は第2を使用するいくつかのアクションメソッドを持っています。/{gameHtmlAbbr}など。それぞれのアクションメソッドについて別々のルートを実行する必要がありますか? – mgmedick

+2

その場合、それぞれのメソッドに特定のルートが必要です。 –

答えて

1

はどちらも、あなた2番目と3番目のルートが(それらの間を区別するために、何も)2つのセグメントでルートを定義し、ルートが順番に一致しているので、それらが定義されている、第二に一致する2つのセグメントを持つ任意のURL(および第三ルートに実行されることはありません)

あなたは、たとえば、GameControllerSnes()方法をヒットするデフォルトルートの前に特定のルートを追加します(と

あなたの第二のルートを削除し、各方法の特定のルートを定義する必要があります
routes.MapRoute(
    name: "Snes", 
    url: "Snes/{gameHtmlAbbr}", 
    defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null } 
); 
関連する問題