Regex поддерживается через параметр :regex()
.Информацию см. В разделе Маршрутизация в документации ASP.NET Core по Regex и, например, Промежуточное ПО маршрутизации .
Попробуйте: [HttpGet("{url:regex(.*)}/list")]
Как вы указали, это не такработать, потому что он работает на токенизированном значении URL-адреса маршрута.
Одной альтернативой является использование универсальной маршрутизации (в Startup.cs):
routes.MapRoute(
name: "therest",
template: "/{**url}",
defaults: new { controller = "Home", action="Index"} // Send to /home/index
);
Или, если вы знаете, что будетограниченное количество элементов пути, вы можете просто включить их все:
[HttpGet("/{url1}")]
[HttpGet("/{url1}/{url2}")]
[HttpGet("/{url1}/{url2}/{url3}")]
[HttpGet("/{url1}/{url2}/{url3}/{url4}")]
public IActionResult Test(string url1 = null, string url2 = null, string url3 = null, string url4 = null)
{
var url = string.Join("/", url1, url2, url3, url4);
//... return View();
}
Я полагаю, что альтернативой является написание некоторого дополнительного кода маршрутизации в промежуточном программном обеспечении.