MVC中按扩展名筛选文件:返回语句位置错误导致功能异常求助
代码修改方案
现存问题
你的代码当前存在两个关键问题:
- 在遍历文件时,找到第一个PDF就立即返回,导致只会返回单个PDF文件,而非目录下所有PDF
- 维护了不必要的
filesList变量,因为需求仅需返回PDF文档,非PDF文件无需收集
修改步骤及优化
- 移除冗余变量:删除
filesList,只保留pdffilesList用于存储PDF文件信息 - 调整返回时机:将
return Ok(pdffilesList)移至foreach循环结束后,确保遍历完所有文件再返回完整的PDF列表 - 优化扩展名判断:用
StringComparison.OrdinalIgnoreCase忽略大小写,避免因.PDF大写扩展名导致漏判 - 可选性能优化:直接用
GetFiles("*.pdf")过滤PDF文件,减少遍历开销
修改后的完整代码
public IActionResult GetFiles(string dir) { if (dir == null || !Directory.Exists(dir)) { return BadRequest(); } var pdffilesList = new List<FileImage>(); var dirInfo = new DirectoryInfo(dir); // 直接过滤PDF文件,无需后续判断 var pdfFiles = dirInfo.GetFiles("*.pdf", SearchOption.TopDirectoryOnly); foreach (var file in pdfFiles) { var match = Regex.Match(file.FullName, "wwwroot(.*)"); pdffilesList.Add(new FileImage { Name = file.Name, // 增加匹配失败的 fallback,避免索引越界 FullName = match.Success ? match.Groups[1].Value : file.FullName, LastWriteTime = file.LastWriteTime.ToString("yyyy.MM.dd HH:mm"), DirectoryName = file.DirectoryName, Length = file.Length, Extension = file.Extension }); } return Ok(pdffilesList); }
补充说明
- 用
GetFiles("*.pdf")直接过滤,比遍历所有文件再判断扩展名更高效 - 正则匹配增加了
match.Success判断,避免路径中无wwwroot时抛出索引越界异常
内容的提问来源于stack exchange,提问作者i13k32
相关产品推荐
相关产品推荐

