2

これはルートの私のコントローラーです (エリアなし):

  • メンバー

私のエリアは次のとおりです。

+一般

  • コントローラー1
  • コントローラー2

+メンバー

  • 管理
  • メンバー

したがってLogin、メンバー エリアを追加する前に、私のアクションはメンバー コントローラー (ルート内) にあります。

では、この問題を解決するために MapRoute を定義するにはどうすればよいでしょうか?

アップデート

私は Main でこれを試しますGlobal.asax:

routes.MapRoute(
             "newLogMaproute",
             "members/login{*pathInfo}",
             new { area = "", controller = "Members", action = "Login"}
        );

しかし、エラーがあります:A path segment that contains more than one section, such as a literal section or a parameter, cannot contain a catch-all parameter.

そして、私はこれを試します:

routes.MapRoute(
             "newLogMaproute",
             "members/login/{*pathInfo}",
             new { area = "", controller = "Members", action = "Login"}
        );

しかし、これは404を返しました。

4

2 に答える 2

1

ここで何が起こっているかというと、会員ルートより先にエリア登録が行われるので、常にエリアルートが優先されます。

Global.asax に次のコードを作成して、テスト アプリでこれを修正しました。

  public static void RegisterPreAreaRoutes(RouteCollection routes)
  {
     routes.MapRoute(
     "Members", // Route name
     "members/login", // URL with parameters
     new { controller = "members", action = "login" } // Parameter defaults
   );
  }

次に Application_Start で、エリアが登録される前にこのルートがマップされることを確認します。

  protected void Application_Start()
  {
     RegisterPreAreaRoutes(RouteTable.Routes);
     AreaRegistration.RegisterAllAreas();
     RegisterGlobalFilters( GlobalFilters.Filters );
     RegisterRoutes( RouteTable.Routes );
  }
于 2012-08-26T15:32:46.527 に答える