在MVC问题中纠正我的URL路由

时间:2015-01-26 17:14:14

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

这与我在此链接correct me on url routing in mvc

中提出的问题有关

现在我遇到了另一个问题,所以我想我会问这个问题。

现在我在global.asax文件中有以下路由

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

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

现在发生的事情就是当我运行我的解决方案时,我得到的URL是http://localhost:65423/Login这就是我需要的登录页面,这是正常的。但是当我以用户身份登录时,我正在"无法找到资源" 错误。

当我查看它时,我可以看到我的网址现已更改为http://localhost:65423/Admin/Dashboard

所以我认为这导致了这个问题。因此,这看起来与我的global.asax路由相关的问题。

任何人都可以帮我找出我做错了什么。

2 个答案:

答案 0 :(得分:1)

您有2条完全可选细分的路线。问题是路由框架无法区分它们。

您可以使用现有路线的唯一方法是按名称明确指定它们(例如使用@Html.RouteLink@Html.RouteUrl时)。

@Html.RouteLink("Custom Link 1", "Custom", new { action = "BigClientLogin" })
@Html.RouteLink("Custom Link 2", "Custom", new { action = "Action2" })
@Html.RouteLink("Home Page", "Default", new { controller = "Home", action = "Index" })
@Html.RouteLink("About", "Default", new { controller = "Home", action = "About" })

这样做会起作用,但不正常。通常,只有一个路由配置了控制器,操作和id的所有默认值,其余路由都有一些显式声明的段和/或约束(最好是段)。

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

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

现在,只有当网址以/Custom/开头时,第一条路线才会匹配。如果它不是以自定义开头,则它将匹配默认路由。

诀窍是ensure that the routes are listed in the right order and that they only match the URL in specific cases,如果情况不正确,可以将它们传递到列表中的下一个路线。

答案 1 :(得分:0)

这是因为有两件事。 首先是你的路线序列 第二个默认值

因此,如果您最终选择的“管理员/信息中心”不是默认设置,那么您是否只是将其放入工作室以便从那里开始?

要访问http://localhost:65423/Login,您需要在您的AuthenticationController上执行一个名为“Login”的操作,但它看起来像您配置的那个是“BicClientLogin”所以除非您指定它,否则不会被用于登录,那时它必须存在。

为了进一步帮助您,我们需要知道您拥有哪些控制器以及存在哪些操作,以及安全性是否是您的解决方案的一部分,如果是,则设置使用的是什么。