剃刀 MVC 控制器下载文件
本文关键字:文件 下载 控制器 MVC 剃刀 | 更新日期: 2023-09-27 18:34:11
我有一个类似于以下代码的控制器,我想知道如何使用 Razor 调用它因为@Url.Action("GetFileFromDisk")
没有按预期工作,所以它只会崩溃。如果可能的话,你能在这里指出我的错误吗?或者也许建议一种更好的方法来强制单击以下载文件
public FilePathResult GetFileFromDisk()
{
string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
string fileName = "test.txt";
return File(path + fileName, "text/plain", "test.txt");
}
提前谢谢。
更新
我收到的错误消息是
http://mypage/Support/GetFileFromDisk 的网页可能暂时关闭,或者可能已永久移动到新的网址。 错误代码:ERR_INVALID_RESPONSE'
要强制下载文件,您可能应该使用 octet-stream
.由客户端(浏览器)决定是否下载或显示内容,但无论如何,通常会下载octet-stream
内容。还应使用 Path.Combine
,而不是手动将文件名与路径连接起来。
public FilePathResult GetFileFromDisk()
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads/");
string fileName = "test.txt";
return File(Path.Combine(path,fileName), "application/octet-stream", "test.txt");
}
编辑,现在您已经给出了实际错误:
此"可能暂时关闭"消息表示在应用程序中找不到与给定 URL 匹配的路由。您的网址可能有问题。
技巧:
- 检查您是否可以使用相同的 URL 模式访问与"GetFileFromDisk"同级的操作。
- 查看您的路线。
- 安装 Glimpse,以便调试路由。
返回File而不是FilePathResult 你应该使用FileResult
或使用 FilePathResult 作为返回
public FilePathResult GetFileFromDisk()
{
string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
string fileName = "test.txt";
return new FilePathResult(Path.Combine(path, fileName), System.Net.Mime.MediaTypeNames.Application.Octet);
}