将操作路由到同一URL

时间:2013-06-01 18:49:02

标签: c# .net asp.net-mvc asp.net-mvc-routing

我想在一个公共网址中隐藏几个控制器“创建”操作的请求。控制器都位于Controllers目录中的子文件夹中:

Controllers \ mydirectory \ controller1
                          \ controller2

我试过这种方式

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

并将controller1更改为

 ../mydirectory/controller1
 /controller1

但是无论何时我去创建动作,网址都保持不变.. .com / controller1 / create

如何做到这一点?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

首先,为这些控制器创建一个文件夹实际上并不是你想要的。 ASP.NET MVC并不关心控制器的位置,它会扫描程序集,所有控制器的行为都会像它们在根目录中一样。

如果在Controllerlers / MyDirectory中放置名为Controller1的控制器。它仍然可以从/Controller1网址到达,MyDirectory/Controller1将失败。

您需要的是一个区域。您必须为这些控制器创建一个区域,将它们放在自己的Controllers文件夹中。

然后你可以在AreaRegistration类中使用这样的区域路径:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "MyArea_default",
        "MyDirectory/{controller}/{action}/{id}",
        new { action = "Create", id = UrlParameter.Optional }
    );
}