如何映射多个.net core控制器路由

问题描述 投票:0回答:1

我目前像这样映射我的控制器路线:

var webApplication = builder.Build();
webApplication.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");

这对于我在参数中不提供操作名称或 id 的默认场景非常有用。例如,以下路线有效:

https://example.com.com
https://example.com.com/Home
https://example.com.com/Books
https://example.com.com/Books/Show/1

但是,我正在为某些产品转向 SEO 更友好的名称,而不是

/1
我想要
/my-book-name
。然而,我仍然希望旧的方式表现得一样。我只想现在就能打字:

https://example.com.com/Books/Show/my-book-name

我不希望对每个操作方法都单独执行此操作,因此我尝试了以下操作:

var webApplication = builder.Build();
webApplication.MapControllerRoute("default-uri", "{controller}/Show/{uri}");
webApplication.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");

但是,当我进入时上面不起作用

https://example.com.com/Books/Show/my-book-name

如何才能实现上述目标?我正在使用 .NET Core 8

c# .net-core routes url-routing asp.net-core-8
1个回答
0
投票

在您为“/my-book-name”场景创建的路由配置中,您可以添加第三个参数“constraints”,并指定一个正则表达式,允许任何带有破折号的单词作为“uri”路由参数。

因此更新后的路由配置将如下所示 -

webApplication.MapControllerRoute("default-uri", "{controller}/Show/{uri}", constraints: new { uri = @"[\w\-]+" });
© www.soinside.com 2019 - 2024. All rights reserved.