ASP.NET Core - 下载.exe返回404错误

时间:2017-03-16 10:37:19

标签: c# asp.net asp.net-mvc download asp.net-core

我有一个ASP.NET核心MVC应用程序,在wwwroot文件夹中,我添加了另一个名为“Shaun”的文件夹,在该文件夹中我删除了一个exe来尝试下载:

enter image description here

现在,如果我导航到:http://localhost:PORT/Shaun/chromesetup.exe我收到404错误。我尝试在下面添加处理程序,但这不起作用。

 <add name="Client exe" path="*.exe" verb="*" modules="StaticFileModule" resourceType="File" />

额外信息:我需要这样做的原因是因为我有一个连接到这个网站的客户端应用程序,该客户端应用程序使用ClickOnce打包并被放入网站的wwwroot,这在以前使用MVC工作(前核心)并且仍然如此,但没有核心。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:14)

尝试以下操作并告诉我它是否有效:

app.UseStaticFiles(new StaticFileOptions
{
    ServeUnknownFileTypes = true, //allow unkown file types also to be served
    DefaultContentType = "Whatver you want eg: plain/text" //content type to returned if fileType is not known.
}

您可以查看StaticFileMiddleware的源代码,了解它如何处理静态文件。

默认情况下,FileExtensionContentTypeProvider用于根据文件扩展名检查ContentType需要在Http Response标头中返回的内容。 exe不在此列表中。

所以另一种选择是将Exe添加到此列表中:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".exe", "application/vnd.microsoft.portable-executable"); //file ext, ContentType
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

答案 1 :(得分:0)

为了提供静态文件(.exe文件是静态文件类型),您必须配置中间件以将静态文件添加到管道。可以通过将Microsoft.AspNetCore.StaticFiles包的依赖项添加到项目中,然后从Startup.Configure调用UseStaticFiles扩展方法来配置静态文件中间件:

public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();
}