exe文件的下载链接导致“未找到”错误

时间:2019-03-24 15:20:46

标签: c# asp.net-core razor-pages

我有一个ASP.NET Core Razor Pages应用程序,想要添加一个链接,单击该链接后将下载exe文件。因此,我在Startup类中添加了以下代码。

Startup.cs

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "folder1")),
    RequestPath = "/folder1"
});
var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".exe", "application/octect-stream");
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

剃刀视图

<a id="installButton" href="https://mysite.net.au/folder1/install/setup.exe">Install</a>

当我单击链接时,出现以下错误。

  

状态码:404;找不到

我也尝试过使用application/vnd.microsoft.portable-executable作为MIME类型,但是遇到了同样的错误。

更新#1: 我知道这个问题已经发布-在发布之前我做了很多搜索和阅读,但是没有建议的解决方案解决该问题。因此,我需要发布确切的代码/位置。

更新#2 没有按钮可以回答我的问题,所以我只在这里提供它: 我可以使之正常工作的唯一方法是添加两个静态文件选项。 这是起作用的代码:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".exe", "application/octect-stream");
app.UseStaticFiles(new StaticFileOptions
{
   FileProvider = new physicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "folder1")),
   RequestPath = "/folder1",
   ServeUnknownFileTypes = true,
   DefaultContentType = "plain/text",
   ContentTypeProvider = provider
});

1 个答案:

答案 0 :(得分:2)

我测试了您的代码并发现了问题。您必须将最后两个UseStaticFiles声明合并为一个。

app.UseStaticFiles();
var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".exe", "application/octect-stream");
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "static")),
    RequestPath = "/folder1",
    ContentTypeProvider = provider
});