C# 如何在.NET核心Mvc中处理两个路由和直接到一个操作
这是我在Startup.cs中的路线规则C# 如何在.NET核心Mvc中处理两个路由和直接到一个操作,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,这是我在Startup.cs中的路线规则 routes.MapRoute( name: "UnsolvedTagspecial", template: "user/undo/{t}", defaults: new { Controller = "user", action = "undo" } ); routes.MapRoute(
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:
public async Task<ActionResult> undo(string t)
{
// .....
}
//控制器:
公共异步任务撤消(字符串t)
{
// .....
}
- 当我输入
在地址行中,我在控制器函数中得到t的值为null李>http://localhost:17623/user/undo/111
- 但是当我输入
在地址行中,我得到控制器函数中的t=111值李>http://localhost:17623/user/111/undo
这让我很困惑,谁能告诉我原因呢?这是因为您必须设置从最特定到最通用的路由。我想你的路线会是这样的
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" }
);
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?}");
因此,当您输入http://localhost:17623/user/undo/111
它命中第一条路径,该路径期望111为id
,但当它转到action
时,参数期望字符串t
。所以你应该这样布置路线
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" }
);
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?}");
从most专用到most通用这是因为您必须设置从most专用到most通用的路由。我想你的路线会是这样的
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" }
);
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?}");
因此,当您输入http://localhost:17623/user/undo/111
它命中第一条路径,该路径期望111为id
,但当它转到action
时,参数期望字符串t
。所以你应该这样布置路线
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" }
);
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?}");
从大多数特定的到大多数通用的最有可能的是,在
“user/undo/{t}”
之前有一条与模式匹配的路径。显示其余的路由(包括属性路由)。我有一个默认路由@Usman。正如他所说,我解决了这个问题。最有可能的是,在“user/undo/{t}”
之前有一条与模式匹配的路径。显示其余的路由(包括属性路由)。我有一个默认路由@Usman。我按照他说的解决了问题我的地图路线顺序和你说的一样,我还有一个问题:我的链接是这样的:http://localhost:17623/user/undo/111
mycontroller=user'和my
action=undo`为什么重定向到此规则routes.MapRoute(名称:“默认”,模板:“{controller=Home}/{action=Index}/{id?}”)
我的MapRoute顺序和你说的一样,cry.我还有一个问题:我的链接是这样的:http://localhost:17623/user/undo/111
mycontroller=user'和myaction=undo`为什么重定向到此规则routes.MapRoute(名称:“默认”,模板:{controller=Home}/{action=Index}/{id?}”);