ASP.NET MVC 路由运行不正常

ASP.NET MVC Routing not working well

我的 ASP.NET MVC 应用程序中有些路由问题让我有些受阻。

让我们假设我有 2 个控制器,它们是:

  1. 任务列表控制器
  2. 任务控制器

我不确定这是否矫枉过正,但我​​的目标是 URL 如下:

对于任务列表控制器:

对于任务控制器:

我的路由设置如下:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

        routes.MapRoute(
            name: "TaskRoute",
            url: "TaskList/{tasklistid}/{controller}/{action}/{taskid}",
            defaults: new { tasklistid = UrlParameter.Optional, controller = "Task", action = "Index", taskid = UrlParameter.Optional }
        );

调试应用程序后,我可以毫无问题地浏览 TaskList 控制器,但是当我在任务控制器上点击以下 url 时,我收到 "Resource cannot be found" 错误:

http://localhost:xxxx/tasklist/1/Task

我必须像下面这样输入单词 "Index" 才能使该页面正常工作... http://localhost:xxxx/tasklist/1/Task/Index

上面url后面的方法签名是...

public class TaskController : Controller
{
    // GET: Task
    public ActionResult Index(int tasklistid)
    {
        //Some code here....
    }
}

有什么想法我错了吗?感谢任何建议。

提前致谢。

所以在考虑了 Nkosi 的评论和 NightOwl888 的文章之后,我所要做的就是将路由修改为如下所示:

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

        routes.MapRoute(
            name: "TaskRoute",
            url: "TaskList/{tasklistid}/Task/{action}/{taskid}",
            defaults: new { controller = "Task", action = "Index", taskid = UrlParameter.Optional }
        );

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

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

基本上做了以下几件事:

  • 调整路由顺序如下:

    1. 任务路线
    2. 任务列表路由
    3. 默认
  • 在 TaskRoute 中,将“{controller}”替换为 'Task' 这实际上是控制器的名称。

我希望这是正确的做法。

干杯