【问题标题】:Download file to browser using .NET Core Razor Pages使用 .NET Core Razor Pages 将文件下载到浏览器
【发布时间】:2018-08-03 19:17:31
【问题描述】:

使用 ASP.NET Razor Pages,我正在尝试将文件下载到浏览器。 从页面(html)中,使用这样的链接可以正常工作:

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

但是,我想从代码隐藏或ViewModel 启动下载,因此文件名是动态的,我还需要先检查文件等。

在 ASP.NET MVC 核心(不是 RazorPages)中,您可以使用以下代码下载文件:

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

但 Razor 页面不支持 return File

【问题讨论】:

  • 返回文件存在,我可以在剃须刀页面中使用它。

标签: c# asp.net razor-pages


【解决方案1】:

pitaridis 是正确的,return File 存在于 Razor 页面中,我一定是缺少命名空间。 这将从 Code Behind 下载一个文件:

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

<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 的子文件夹中

【讨论】:

  • 在 aspnet 核心中,我们也可以停止对这些媒体类型进行硬编码:MediaTypeNames.Application.Octet
【解决方案2】:

也可以像这样使用 GET 调用而不是 POST:

把这个放在你的页面代码后面:

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>

【讨论】:

    【解决方案3】:

    就我而言,我需要在 Razor 页面的 OnPost 处理程序中下载生成的文件。诀窍是生成到 wwwroot 的路径相对路径。这对我有用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2021-02-26
      • 2021-09-16
      • 2019-07-05
      • 2018-11-08
      • 2022-06-16
      • 2021-09-25
      相关资源
      最近更新 更多