c# - C# 端点以 JSON 形式返回目录和文件的嵌套列表
问题描述
我的目标是实现一个端点,它返回从某个根目录开始的所有文件和目录的嵌套列表,例如C:\Temp
. 我写了以下代码:
namespace API.Controllers
{
public class UploadController : BaseController
{
[Route("api/Uploaded", Order = -1)]
[ResponseType(typeof(IEnumerable<string[]>))] // <- this has to be adjusted, I guess.
public IHttpActionResult AutoUpload()
{
string[] entries = Directory.GetFileSystemEntries("C:\Temp", "*", SearchOption.AllDirectories);
// <-- Here should come some conversion to a nested JSON.
return Ok(entries);
}
}
}
当我查询端点时,例如curl -X POST --header 'Accept: application/json' 'http://localhost:63291/api/Uploaded'
响应是什么
[
"C:\\\\Temp\\file1",
"C:\\\\Temp\\dir1\\file2",
"C:\\\\Temp\\dir1\\file3"
]
我宁愿拥有的是类似以下的东西
[
{ "~":
[ "file1" ]
},
{
"~/dir1":
[
"file2" ,
"file3"
]
}
]
我确信将我的列表转换为嵌套的 JSON 不会那么复杂,但我不知何故无法做到这一点。我担心,我错过了适当的搜索词。请帮忙!
解决方案
首先,属性 [ResponseType]
不会影响您的响应,它只是元数据,例如 swagger 用来记录您的端点。
Directory.GetFileSystemEntries
正如格雷格所说,返回代表路径的集合(数组)od字符串。您需要将结果解析为您希望我看到的格式,这类似于File
类和Directory
包含,File
但更好的方法是使用内置类型,如FileInfo
.
DirectoryInfo
类提供了一些您可以使用的有用方法:
获取目录中的所有文件:https ://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getfiles?view=netframework-4.8
获取目录中的所有目录: https ://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getdirectories?view=netframework-4.8
阅读该方法返回的数据类型并充分利用它;)
我认为您需要进行一些递归才能遍历所有子目录。
推荐阅读
- java - 如何使用java将地图数据列表构建为分层父子关系
- nginx - 无法在 nginx 中读取自签名证书
- javascript - 使用 JavaScript 模拟/调用 .mouseover 事件
- json - 如何在 Flutter 中序列化一个抽象类?
- javascript - CORB:JSFiddle 上的跨域读取阻塞
- reactjs - 在按钮上调用 setState 后反应错误无法 POST /TrajetBus
- jenkins - 每次合并开发后,所有待处理的 PR 都开始在 jenkins 中运行
- c++ - 无法使用 make_index_sequence 作为函数的默认参数(未定义模板的实例化)
- python - 如何在 Flask 中提取一年前的日期字段
- php - PDO 连接错误与 SQL 错误,如何检测