1

私のメインの開始ページはApplicantProfileであるため、デフォルトのルートは次のようになります。

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

このコントローラーにはパブリック アクセス用のインデックスがありませんが、他のすべてのコントローラーにはあります。私が望むのは、ワイルドカードに相当するものです。

routes.MapRoute(
    name: "Others",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "*", action = "Start", id = UrlParameter.Optional }
);

どうすればこれを達成できますか?

4

3 に答える 3

4

これはそれを処理する必要があります:

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

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

ApplicantProfileController、HomeController、および OtherController があると仮定すると、次のようになります。

  • /ApplicantProfile → ApplicantProfileController.Start
  • /その他 → その他Controller.Index
  • /SomeOtherPath → デフォルトの 404 エラー ページ
  • / → デフォルトの 404 エラー ページ

ルーティングの概要については、http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-csを参照してください。少し古いですが、基本的なことは十分にカバーしています。

ルーティングはトップダウンで行われます。つまり、ルーティング テーブルの最初の一致で停止します。最初のケースでは、最初に ApplicantProfile ルートを照合して、コントローラーが使用されるようにします。2 番目のケースでは、パスから Other を取得し、一致するコントローラーを見つけて使用します。最後の 2 つは一致するコントローラーを見つけられず、デフォルトが指定されていないため、デフォルトの 404 エラーが返されます。エラーの適切なハンドラーを配置することをお勧めします。回答はこちらこちらをご覧ください。

于 2013-02-01T14:14:42.343 に答える
1

デフォルトでは、開始アクションを使用してプロファイルコントローラーに移動し、他のすべての要求は、コントローラーが何であれ、インデックスアクションに到達する必要があります。

IRouteConstraintを使用して、他のルートのURLに制約を追加し、それをデフォルトのコントローラーの上に配置して、コントローラーのルートに制約を設定します。

コントローラがApplicationProfileではないかどうかのチェックを追加して使用できます。

これがお役に立てば幸いです。

于 2013-02-08T11:33:51.967 に答える
1

これはあなたの要件に従って動作するはずです

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

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

最初の 1 つは「開始」アクションにルーティングする URL で、もう 1 つはデフォルトです。「ホーム」コントローラーをデフォルトのものに置き換えます。

于 2013-02-04T08:36:29.517 に答える