我目前像这样映射我的控制器路线:
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
在您为“/my-book-name”场景创建的路由配置中,您可以添加第三个参数“constraints”,并指定一个正则表达式,允许任何带有破折号的单词作为“uri”路由参数。
因此更新后的路由配置将如下所示 -
webApplication.MapControllerRoute("default-uri", "{controller}/Show/{uri}", constraints: new { uri = @"[\w\-]+" });