这与我在此链接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
路由相关的问题。
任何人都可以帮我找出我做错了什么。
答案 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”所以除非您指定它,否则不会被用于登录,那时它必须存在。
为了进一步帮助您,我们需要知道您拥有哪些控制器以及存在哪些操作,以及安全性是否是您的解决方案的一部分,如果是,则设置使用的是什么。