C# ASP.NET核心-Download.exe返回404错误

C# ASP.NET核心-Download.exe返回404错误,c#,asp.net,asp.net-mvc,download,asp.net-core,C#,Asp.net,Asp.net Mvc,Download,Asp.net Core,我有一个ASP.NET core MVC应用程序,在wwwroot文件夹中,我添加了另一个名为“Shaun”的文件夹,并在该文件夹中删除了一个exe以尝试下载: 现在,如果我导航到:我得到一个404错误。我已尝试在下面添加处理程序,但这不起作用 <add name="Client exe" path="*.exe" verb="*" modules="StaticFileModule" resourceType="File" /> 额外信息:我之所以需要这样做,是因为我有一

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

现在,如果我导航到:我得到一个404错误。我已尝试在下面添加处理程序,但这不起作用

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

额外信息:我之所以需要这样做,是因为我有一个连接到此网站的客户端应用程序,该客户端应用程序使用ClickOnce打包并放入网站的wwwroot,这以前使用MVC(pre-Core)工作,现在仍然如此,但不使用Core


如何修复此问题?

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

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
用于根据文件扩展名检查Http响应头中需要返回的内容类型<代码>exe不在此列表中

因此,另一个选项是将Exe添加到此列表:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".exe", "application/vnd.microsoft.portable-executable"); //file ext, ContentType
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});
为了提供静态文件(.exe文件是静态文件类型),必须配置中间件以将静态文件添加到管道中。可以通过向项目中添加对Microsoft.AspNetCore.StaticFiles包的依赖项,然后从启动时调用UseStaticFiles扩展方法来配置静态文件中间件。配置:

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

这可能是因为StaticFileHandler中间件不允许使用文件扩展名。(Dotnet core本身就有StaticFileHandlerMiddleware)@JoelHarkes如何允许它?@Smity我为您提供了一个答案您的第一个代码工作伙伴,现在就要测试第二个代码段了!你知道他们之间的区别吗?@Smithy如果你读了我的文章,应该会给出原因。对于第一个default内容类型是returnedYepp,第二个代码段也可以:D我认为ServerUnknownFileTypes将返回任何内容,并且将.exe添加到列表中更安全?非常感谢!