【发布时间】:2020-12-30 07:58:30
【问题描述】:
这个问题与 ASP.NET Core 路由有关。我正在实践Multiple Conventional Routes 的概念(ASP.NET CORE 3.1 LTS)。 微软文档MultipleConventional Routes
根据文档,传统路由是依赖于顺序的。这意味着没有正确排序我的路线会产生后果。
这里是 app.UseEndpoint 方法的代码 sn-p 以及配置的路由列表。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}");
endpoints.MapControllerRoute(
name: "CustomerHomepage",
defaults:new { controller = "Customer", action = "Index" },
pattern: "customer/{name}/index"); });
对于这个请求 https://localhost:44341/customer/sean/details
首先看路线模板和顺序,尤其是第一条路线,它是完美匹配的 与
控制器名称 = 客户
动作名称 = 肖恩
id = 详细信息。
我在项目中有什么。
- 我确实有一个控制器名称 Customer,但没有作为 sean 的操作名称,而是在客户控制器中将操作名称作为详细信息。
问题 我要说明的是,这条路径 customer/sean/details 总体上应该是无效的,并且不应根据路由模板的顺序在任何地方导航。 相反,它确实导航到客户控制器中的操作方法 Details。问题是为什么它正在工作,而不是基于传统路由依赖于订单的概念,并且此请求 URL customer/sean/details 与第一条路由匹配。此外,关于传统路由依赖于顺序的说法,最好的例子是什么。
下面列出了客户控制器的代码
public class CustomerController: Controller
{
public IActionResult Index(string name)
{
return View();
}
public IActionResult Details(string name) {
ViewBag.CustomerName = name;
return View();
}
}
【问题讨论】:
标签: asp.net-core asp.net-core-mvc asp.net-core-3.1