【问题标题】:Route Actions to same URL将操作路由到相同的 URL
【发布时间】:2013-06-01 18:49:02
【问题描述】:

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

Controllers \ mydirectory \ controller1
                          \ controller2

我试过这样

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

并已将控制器 1 更改为

 ../mydirectory/controller1
 /controller1

但是每当我执行创建操作时,网址都保持不变.. .com/controller1/create

如何正确地做到这一点?感谢您的帮助!

【问题讨论】:

  • 显而易见的问题:当然,您已经将自定义路由置于 RouteConfig.cs 中的默认路由之上,对吧?因为如果您的自定义路由在默认路由之后 出现,则默认路由将被执行,并且会产生如您在问题中所述的 url。
  • 感谢您的输入,是的,自定义路由放置在默认路由之上。

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


【解决方案1】:

首先,为这些控制器创建一个文件夹实际上并不能满足您的要求。 ASP.NET MVC 不关心你的控制器在哪里,它会扫描程序集,所有控制器的行为就像它们在根目录中一样。

如果您将一个名为 Controller1 的控制器放在 Controllers/MyDirectory 中。它仍然可以从/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 }
    );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多