MVC路由与部分类

The*_*son 2 c# asp.net-mvc asp.net-mvc-routing

我有一个失控的请求控制器,我想在几个控制器上划分操作,同时保持一个干净的URL.我正在尝试路由,但没有成功.我已经阅读了一些关于路由的示例和教程,但是,虽然我理解这些示例,但似乎没有什么适用于我的情况,我觉得不是更明智.我想要的是Requests/Approval在我的ApprovalController而不是我的RequestController上处理URL ,所以我写了以下内容.

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Approval",
            "Request/{controller}/{action}",
            new { controller = "Approval", action="Index", id = "" }
        );

    }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.为什么?我的视图中有一个名为Approval的文件夹,在那里我有一个名为的文件Index.cshtml.我该如何编写MapRoute代码?

编辑

我添加了我所有的路线

Jos*_*hua 5

您需要交换两个MapRoute语句,如下所示:

routes.MapRoute(
    "Approval",
    "Request/Approval/{action}",
    new { controller = "Approval", action="Index", id = "" }
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

它当前不起作用的原因是因为第一个语句('默认'路由名称)在第二个语句被评估之前得到匹配.

另外(如我上面的示例中所述),您需要删除Approval路径中的"{controller}"并替换为"Approval"...除非您特别需要URL/Request/{ANY controller}/{action}经历,我怀疑.根据您的问题,您似乎只需要/请求/批准/转到您的审批控制器.

不要忘记将默认路由保留在底部,以便与其他控制器和操作匹配.如果不存在其他匹配项,它可以作为一个包罗万象.