所以我需要创建一个文件验证器来检查文件类型是否正确。最初我们只是检查请求的内容类型,但与往常一样,我们的测试人员通过简单地将 exe 文件的文件扩展名更改为 .csv 来绕过限制,这可能会欺骗我们的直接检查。
这就是我目前在验证器中所拥有的
private bool IsCorrectFileType(IFormFile file)
{
using var reader = new StreamReader(file.OpenReadStream());
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
try
{
csv.Read();
csv.ReadHeader();
List<string> headers = csv.Context.HeaderRecord.ToList();
}
catch (Exception _)
{
return false;
}
return true;
}
我打算做的是,如果 CSV 阅读器在文件中找不到标题,那么我希望它会爆炸并返回 false,但正在发生的事情是文件的全部内容正在作为单个标题读入所有非 csv 文件类型的情况。导致它认为它确实是一个有效的 csv 文件并返回 true。
我一生都无法找到一种方法来捕捉 CSV 文件是否确实有效,因为在大多数情况下,CSV 阅读器可以将所有流作为字节数据读取,并且标题记录的上下文在此看起来像一个有效的 CSV案子。
令人讨厌的是,尽管我们永远不会上传带有单个标头的文件,但仅对标头进行标准计数以查看它是否只有一个标头来捕获此问题感觉很愚蠢。
任何帮助都将不胜感激,因为我对此感到有些困惑。在此先感谢,克里斯。