ASP.NET Core 3.1,处理多个路由参数

Exp*_*ngx 0 c# asp.net-core

我有一个小的 API 可以提供文件服务。请求的文件来自我们的 ClickOnce 应用程序。GET是否可以通过单个GET操作获取所有路由参数,以便构建相对路径,而不是进入请求的文件夹/文件的多个操作。

GET路线示例

/api/ApplicationFiles
/api/ApplicationFiles/somefile
/api/ApplicationFiles/someFolder/somefile
/api/ApplicationFiles/someFolder/someFolder/someFolder/someFile
Run Code Online (Sandbox Code Playgroud)

所以我必须定义多个GET端点。

Mét*_*ule 5

您可以使用星号来指示您的路由参数可以包含斜杠。这称为包罗万象的参数,如下所示:

[Route("/api/ApplicationFiles/{**path}")]
public IActionResult GetFile(string path)
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

从文档中:

您可以使用星号 ( *) 或双星号 ( **) 作为路由参数的前缀来绑定到 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