Asp.net mvc .NET MVC:返回FilePathResult而不使用相对路径

Asp.net mvc .NET MVC:返回FilePathResult而不使用相对路径,asp.net-mvc,download,Asp.net Mvc,Download,我想返回一个PDF的链接,它将在客户端启动下载。我有一个方法如下所示: public ActionResult DownloadPdf() { return File("bitcoin.org/bitcoin.pdf", "application/pdf", Server.UrlEncode("bitcoin.org/bitcoin.pdf"); } 我总是会得到一个System.IO.DirectoryNotFoundException,因为我的URL被用作一个相对路径(像C:\my

我想返回一个PDF的链接,它将在客户端启动下载。我有一个方法如下所示:

public ActionResult DownloadPdf()
{
    return File("bitcoin.org/bitcoin.pdf", "application/pdf", Server.UrlEncode("bitcoin.org/bitcoin.pdf");
}

我总是会得到一个
System.IO.DirectoryNotFoundException
,因为我的URL被用作一个相对路径(像
C:\mydir\bitcoin.org\bitcoin.pdf这样的内容会被搜索但找不到)。如何返回托管在别处的文件?

要将托管在异地的文件作为FileResult返回,您需要先下载该文件,然后将其返回到客户端。像这样的方法应该会奏效:

public ActionResult DownloadPdf()
{
    using (var client = new WebClient())
    {
        byte[] bytes = client.DownloadData("http://bitcoin.org/bitcoin.pdf");
        return File(bytes, "application/pdf", Server.UrlEncode("bitcoin.org/bitcoin.pdf"));
    }
}
我不知道您的要求是什么,但似乎只需链接到非现场资源或自己托管它会更容易,这样您就不必在每次请求时都将其下载到服务器

据我所知,这是唯一一种可以将未托管的文件作为FileResult返回的方法

如果您有任何问题,或者有任何不清楚的地方,请告诉我