自定义路由覆盖其他路由

时间:2017-01-01 17:20:26

标签: c# asp.net-mvc model-view-controller routes

我必须在这里寻求帮助,因为我不知道它是如何发生的,这里有什么问题。

以下是路线:

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

        routes.MapRoute(
            name: "View",
            url: "{controller}/{action}/{id}/{cid}/{pid}",
            defaults: new { controller = "Read", action = "R", id = UrlParameter.Optional, cid = UrlParameter.Optional, pid = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "JsonResult",
            url: "jsonresult/{id}/{cid}/{pid}",
            defaults: new { controller = "Find", action = "Readable", id = UrlParameter.Optional, cid = UrlParameter.Optional, pid = UrlParameter.Optional}
        );

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

现在有几个问题:

首先 - 底部的默认设置根本不起作用。由于某种原因,我实际上将"View"路由设为Default路由。 第二个 - JsonResult路线获得404 error,如果我将其放在顶部,它会消失,但View路线无效。

我真的不知道如何解决; l

1 个答案:

答案 0 :(得分:0)

始终将您的默认路线置于顶部。

来到您的jsonresult问题,您缺少控制器名称。

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

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

        routes.MapRoute(
            name: "View",
            url: "{controller}/{action}/{id}/{cid}/{pid}",
            defaults: new { controller = "Read", action = "R", id = UrlParameter.Optional, cid = UrlParameter.Optional, pid = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "JsonResult",
            url: "{controller}/{id}/{cid}/{pid}", /*Changed to Controller here*/
            defaults: new { controller = "Find", action = "Readable", id = UrlParameter.Optional, cid = UrlParameter.Optional, pid = UrlParameter.Optional}
        );

    }