1

アプリケーション内で次の 2 つのルートを定義しています。

      routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/{controller}/{action}/{id}",
            new { language="en" , country="gb",  id = UrlParameter.Optional }
        );


        routes.MapRoute(
             "Default",
             "{language}-{country}/{controller}/{action}/{id}",
            new { language = "en", country = "gb",  id = UrlParameter.Optional }
        );

最初のルートは次のような URL をキャッチします

  • ja-jp/11111/ターゲット/リスト
  • en-gb/11111/ターゲット/編集/2

2 番目のルートは、このような場合に使用されるデフォルト ルートです。

  • en-gn/アカウント/ログオン

私が持っている質問は、applicationRoutes ルート経由で来た場合にのみ呼び出されるように強制したい特定のコントローラーがあることです。

たとえば、ターゲットコントローラーがルートデータ内のユーザーIDで呼び出されることを確認したいと思います。

ユーザーIDキーがルートデータ内の値で存在するかどうか、各コントローラーアクション内で確認できることはわかっています。しかし、これは私にはそれほどエレガントではないようです。

ルートをより具体的にして、次のようにすることもできます。

  routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/Targets/{action}/{id}",
            new { language="en" , country="gb", controller="targets", id = UrlParameter.Optional }
        ); 

しかし、これはユーザー ID 値を提供せずに en-gb/Targets/List/ へのリクエストを直接停止しません。

これを処理する最良の方法は何ですか?

4

1 に答える 1

0

userid パラメータの制限を作成できます。

  routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/{controller}/{action}/{id}",
              new { language="en" , country="gb",  id = UrlParameter.Optional },
              new { userid =@"\d+" }); 

これにより、userid が有効な整数であることが確認されます。そうでない場合は、リクエストの処理に次のルートが使用されます。

于 2012-12-02T20:38:08.977 に答える