如何创建具有任意扩展名的文件的href下载链接

时间:2019-06-28 05:25:41

标签: c# html asp.net-core

我有各种扩展名的文件,这些文件可以在Razor页面视图中创建下载链接。例如:

<a href="@Model.DownloadFile.FilePath" download="@Model.FileDownloadName" class="btn btn-outline-primary">Download</a>

这适用于以.md或.txt结尾的文件。但是对于其他扩展名,我会收到

  

失败-没有文件

在chrome中下载。直接浏览文件时,我收到404。

在检查元素时,它确实显示了正确的路径,并且正如我说的,如果更改扩展名,它可以工作,但是我不希望用户必须将下载的文件重命名为适当的扩展名。

我正在将ASP.NET Core 2.2与Razor Pages和Bootstrap一起使用。我的下载目录位于wwwroot文件夹中,并且我的Configure方法中确实有app.UseStaticFiles();

2 个答案:

答案 0 :(得分:0)

通过修改我的Configure方法来解决

app.UseStaticFiles();

app.UseStaticFiles(new StaticFileOptions
        {
            ServeUnknownFileTypes = true,
            DefaultContentType = "image/png"
        });

更多信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-2.2#non-standard-content-types

答案 1 :(得分:0)

提供未知文件类型不是一个好主意。这是一种安全风险,甚至文档也警告您不要使用它。如果您知道需要提供的文件扩展名,则应该为它们添加mime类型映射:

services.Configure<StaticFileOptions>(o =>
{
    var provider = new FileExtensionContentTypeProvider();

    // Repeat this for each extension you need to map.
    provider.Mappings[".foo"] = "text/plain";

    o.ContentTypeProvider = provider;
});