And*_*uin 2 c# asp.net-mvc routes asp.net-core
我想创建一个路由,在 url 中路由无限的字符串集合。
像这样:
https://github.com/{orgName}/{projectName}/blob/{branchName}/{folderName1}/{folderName2}/.../{folderNameN}/{fileName}
Run Code Online (Sandbox Code Playgroud)
例如
https://github.com/AiursoftWeb/Nexus/blob/master/Account/Controllers/AccountController.cs
Run Code Online (Sandbox Code Playgroud)
将路由到此操作。路由结果应为:
orgName: AiursoftWeb
projectName: Nexus
branchName: master
folderNames: string[2] of:
"Account"
"Controllers"
fileName: AccountController.cs
Run Code Online (Sandbox Code Playgroud)
我如何做到这一点?
我尝试了以下方法:
https://github.com/{orgName}/{projectName}/blob/{branchName}/{folderName1}/{folderName2}/.../{folderNameN}/{fileName}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
使用星号字符将路由模板中的占位符表示为包罗万象的参数。然后您必须自己将此参数拆分为文件夹名称:
[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
}
Run Code Online (Sandbox Code Playgroud)
从 ASP.net Core 2.2 开始,您应该使用双星号,以便自动生成的 url 不会对 url 中的斜杠进行 url-escape:
[Route("Folders/ViewContent/{siteName}/{**folderNames}")]
Run Code Online (Sandbox Code Playgroud)
来自https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2
您可以使用星号 (
*) 或双星号 (**) 作为路由参数的前缀,以绑定到 URI 的其余部分。这些被称为 包罗万象的参数。例如,blog/{**slug}匹配任何以 开头/blog并在其后具有任何值的URI,该值分配给slug路由值。Catch-all 参数也可以匹配空字符串。当路由用于生成 URL 时,catch-all 参数会转义适当的字符,包括路径分隔符 (
/) 字符。例如,foo/{*path}带有路由值的路由会{path = "my/path" }生成foo/my%2Fpath. 注意转义的正斜杠。要往返路径分隔符,请使用**路由参数前缀。foo/{**path}带有{ path = "my/path" }生成的路由foo/my/path。
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |