Используйте символ звездочки, чтобы обозначить местозаполнитель в шаблоне маршрута в качестве универсального параметра. Затем вам нужно разделить этот параметр на имена папок самостоятельно:
[Route("Folders/ViewContent/{siteName}/{*folderNames}")]
public async Task<IActionResult> ViewContent(string siteName, string folderNames)
{
folderNames = folderNames ?? "";
string[] folders = folderNames.Split('/', StringSplitOptions.RemoveEmptyEntries);
// your other code
}
Начиная с ASP.net Core 2.2, вы должны использовать двойную звездочку, чтобы сгенерированные автоматически URL-адреса не избежали косой черты в URL:
[Route("Folders/ViewContent/{siteName}/{**folderNames}")]
С https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2
Вы можете использовать звездочку (*
) или двойную звездочку (**
) в качестве префикса к
параметр маршрута для привязки к остальной части URI. Это называется
универсальные параметры. Например, blog/{**slug}
соответствует любому URI, который
начинается с /blog
и имеет любое значение после него, которое присваивается
slug
значение маршрута. Параметры Catch-all также могут соответствовать пустым
строка.
Параметр catch-all экранирует соответствующие символы, когда
Маршрут используется для генерации URL, включая разделитель пути (/
)
персонажи. Например, маршрут foo/{*path}
со значениями маршрута {
path = "my/path" }
генерирует foo/my%2Fpath
. Обратите внимание на побег вперед
слэш. Чтобы использовать символы разделителя пути туда и обратно, используйте маршрут **
префикс параметра. Трасса foo/{**path}
с { path = "my/path" }
генерирует foo/my/path
.