我有一个类似下面代码的控制器,我想知道如何使用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`
答案 0 :(得分:1)
要强制下载文件,您应该使用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");
}
编辑,现在您已发出实际错误:
此"可能会暂时停止" message表示在您的应用程序中找不到与给定URL匹配的路由。您的网址可能有问题。
提示:
答案 1 :(得分:0)
我认为如果你返回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);
}