1

共通の URL で複数のコントローラの「作成」アクションのリクエストを非表示にしたいと考えています。コントローラーはすべて Controllers ディレクトリのサブフォルダーにあります。

Controllers \ mydirectory \ controller1
                          \ controller2

私はこの方法でそれを試しました

routes.MapRoute(
    name: "controller1Create",
    url: "buy",
    defaults: new { controller = "controller1", action = "Create" }
);

controller1をに変更しました

 ../mydirectory/controller1
 /controller1

しかし、作成アクションに行くときはいつでも、URLは同じままです.. .com/controller1/create

それを正しく行う方法は?ご協力ありがとうございました!

4

1 に答える 1

1

まず、これらのコントローラー用のフォルダーを作成しても、実際には期待どおりの結果が得られません。ASP.NET MVC はコントローラーの場所を気にしません。アセンブリをスキャンし、すべてのコントローラーがルートにあるように動作します。

Controllers/MyDirectory に Controller1 という名前のコントローラーを配置した場合。/Controller1 URLからはまだ到達可能であり、MyDirectory/Controller1失敗します。

必要なのはエリアです。これらのコントローラー用の領域を作成して、独自の Controllers フォルダー内に配置する必要があります。

次に、AreaRegistration クラスで次のようなエリア ルートを使用できます。

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "MyArea_default",
        "MyDirectory/{controller}/{action}/{id}",
        new { action = "Create", id = UrlParameter.Optional }
    );
}
于 2013-06-01T19:06:53.047 に答える