MVC没有返回正确的文件类型

时间:2016-04-22 18:42:28

标签: asp.net-mvc asp.net-mvc-5

我在MVC 5应用程序中写了一个基本的FilePathResult来返回一个文件。未正确返回的文件类型为.xlsxPDF's和其他文件工作正常。

public FilePathResult Download(int? id)
{
    var model = db.DisciplineModels.Where(x=>x.Id == id).Include(i=>i.Employee).FirstOrDefault();
    string username = model.Employee.FirstName + " " + model.Employee.LastName;
    string mimeType = MimeMapping.GetMimeMapping(model.Report_Filename);
    string path = string.Format(@"~/Employee Records/{0}/HR/Discipline/{1}", username, model.Report_Filename);
    return new FilePathResult(path, mimeType);
}

我的mimeType将以正确的文件类型application/vnd.openxmlformats-officedocument.spreadsheetml.sheet返回,文件路径正确(文件位于文件夹中)。一切似乎都运行正常,直到它将文件传递给浏览器进行下载。它作为没有扩展名的文件返回。我没有在这台计算机上安装Office,但这应该重要吗? (它是一台开发机器,不需要办公室)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

开始编辑

根据Controller source code

  $request = new FacebookRequest( $session, 'GET', '/me?fields=id,name,email' );
  $response = $request->execute();

因此,对于您的情况,您可以尝试使用与protected internal virtual FilePathResult File(string fileName, string contentType, string fileDownloadName) { return new FilePathResult(fileName, contentType) { FileDownloadName = fileDownloadName }; } 相同的return new FilePathResult(path, mimeType) { FileDownloadName = model.Report_Filename };

结束修改

尝试将以下部分添加到return File(path, mimeType, model.Report_Filename);

web.config

答案 1 :(得分:1)

通过将返回类型从FilePathResult更改为File,我能够使其按预期运行。

将此return new FilePathResult(path, mimeType);更改为return File(path, mimeType, model.Report_Filename);

不确定为什么FilePathResult无效。 (非常感谢任何见解)。