[英]How to handle two route and direct to one Action in .NET-Core Mvc
这是我在Startup.cs中的路线规则
routes.MapRoute(
name: "UnsolvedTagspecial",
template: "user/undo/{t}",
defaults: new { Controller = "user", action = "undo" }
);
routes.MapRoute(
name: "UnsolvedTag",
template: "user/{t}/undo",
defaults: new { Controller = "user", action = "undo" }
);
这是我在Controller中的操作:
//Controller:
public async Task<ActionResult> undo(string t)
{
// .....
}
http://localhost:17623/user/undo/111
时,我在控制器函数中得到t的值为null ; http://localhost:17623/user/111/undo
时,我在控制器函数中得到了t = 111的值; 这让我感到困惑,谁能告诉我为什么?
这是因为您必须设置从最具体到最通用的路由。 我想你的路线会像这样
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "UnsolvedTagspecial",
template: "user/undo/{t}",
defaults: new { Controller = "user", action = "undo" }
);
routes.MapRoute(
name: "UnsolvedTag",
template: "user/{t}/undo",
defaults: new { Controller = "user", action = "undo" }
);
因此,当您输入http://localhost:17623/user/undo/111
它将到达第一个路由,该路由期望id
111,但是当它执行action
该参数期望string t
。 所以你应该放这样的路线
routes.MapRoute(
name: "UnsolvedTagspecial",
template: "user/undo/{t}",
defaults: new { Controller = "user", action = "undo" }
);
routes.MapRoute(
name: "UnsolvedTag",
template: "user/{t}/undo",
defaults: new { Controller = "user", action = "undo" }
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
从最具体到最通用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.