使用.NET Core Razor页面将文件下载到浏览器



使用asp.net剃须刀页面,我正在尝试将文件下载到浏览器中。从页面(html(中,使用这样的链接可以正常工作:

href="/DownloadableFiles/testB.csv" download="newname">Download Link

但是,我想从Code-Behind或ViewModel启动下载,以使文件名是什么,我还需要先检查文件,等等。

在ASP.NET MVC Core(不是RazorPages(中,您可以在代码中下载文件:

return File(memory, GetContentType(path), Path.GetFileName(path));

,但剃须刀页面不支持return File

pitaridis是正确的,return File存在于剃须刀页面中,我一定缺少一个名称空间。这将从:

后面的代码下载文件

在页面中,这是提交按钮:

<button type="submit" asp-page-handler="DownloadFile" style="width:75px" 
        class="cancel"> Download </button>

在PageModel(背后的代码(中:

public ActionResult OnPostDownloadFile()
{
    return File("/DownloadableFiles/TestFile34.csv", "application/octet-stream", 
                "NewName34.csv");
}

注意:/DownloadableFiles在wwwroot

的子文件夹中

也可以使用get呼叫而不是这样的帖子:

将其放在您的页面代码中:

public ActionResult OnGetDownload()
{
  return File("c:/Directory/FileName.csv", "application/octet-stream", "FileName.csv");
}

并将其放在该页面上:

 <a href="@Url.Page("ThePageName", "Download")>Download</a>

如果要传递参数,只需在url.page调用中包含它们,然后将参数添加到ongetDownload中:

public ActionResult OnGetDownload(int Id)
{
  return File("c:/Directory/FileName.csv", "application/octet-stream", "FileName.csv");
}
<a href="@Url.Page("ThePageName", "Download", new { Model.Id })">Download</a>

在我的情况下,我需要在剃须刀页面的Onpost处理程序中下载一个生产的文件。诀窍是产生通往wwwroot的路径相对路径。这对我有用:

public async Task<FileResult> OnPost()
{
    var pathToZipOnDisk = ProduceFile();
    ...
    return File($"~/export/{Path.GetFileName(pathToZipOnDisk)}", 
        "application/zip", 
        "download.zip");
}

相关内容

最新更新