我在RoutingConfig.cs中有以下路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
// Not working why?
routes.MapRoute(
name: "AdminLoginRequestUrl",
url: "{controller}/{action}/{requestUrl}",
defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
);
问题是第二个路由无效 我在这里想念什么?有人有任何提示或想法MVC对我来说是新的
答案 0 :(得分:1)
只能通过区分参数名称来创建不同的路径,两个路径都存在类似的路径。同时将自定义路线移至默认路线之上。你可以试试这个
<router-outlet></router-outlet>
您可以使用 routes.MapRoute(
name: "AdminLoginRequestUrl",
url: "{controller}/{action}/route2/{requestUrl}",
defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
的任何内容来区分默认路由
答案 1 :(得分:0)
您不能通过变量名来区分路径。您可以创建更具体的路线:
routes.MapRoute(
name: "AdminLoginRequestUrl",
url: "Admin/{action}/{requestUrl}",
defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
请注意,注册顺序非常重要。
或者您可以将参数重命名为适合两个控制器的参数并使用它。
答案 2 :(得分:0)
考虑使用MapHttpAttributeRoutes()
,您可以在此处阅读:https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ 1。
修改:更改链接以获得更好的文章。
然后,您可以使用属性为您的操作定义更具体的规则。
示例:
public class Admin : Controller
{
[Route("admin/{requestUrl}")]
public ActionResult Login(string requestUrl) { ... }
}