2017-03-16 40 views
5

我有一个ASP.NET核心MVC应用程序,并在wwwroot文件夹中,我添加了另一个名为“肖恩”的文件夹,并在该文件夹中我已经删除了一个EXE尝试下载:ASP.NET核心 - 下载.exe返回404错误

enter image description here

现在,如果我浏览到:http://localhost:PORT/Shaun/chromesetup.exe我得到一个404错误。我试过在下面添加Handler,但这不起作用。

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

额外的信息:我需要做的原因是因为我有一个连接到这个网站的客户端应用程序,客户端应用程序使用ClickOnce包装和被丢弃到网站的wwwroot文件,这个早先工作使用MVC(前核心),但仍然没有核心。

我该如何解决这个问题?

+0

这可能是因为文件的扩展名没有被允许:静态文件中间件可以通过增加对Microsoft.AspNetCore.StaticFiles软件包的依赖关系到项目中,然后调用从Startup.Configure的UseStaticFiles扩展方法来配置StaticFileHandler中间件。 (Dotnet核心本身有StaticFileHandlerMiddleware) –

+0

@JoelHarkes我如何让它被允许? – Smithy

+1

@Smity我为你提供了一个答案 –

回答

7

尝试以下,并告诉我,如果它的工作原理:

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不在此列表中。

那么另一个选择是埃克添加到这个列表:

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

你的第一个代码作品交配,现在就要测试第二个代码片段!你知道他们之间的区别吗? – Smithy

+0

@Smithy如果你阅读我的文字,它应该提供原因。对于第一个默认的内容类型返回 –

+1

叶普,第二个片段也适用:D我认为它ServerUnknownFileTypes将返回任何内容,并将.exe添加到列表更安全? – Smithy

0

为了让静态文件(.exe文件是一个静态文件类型)送达,必须配置中间件添加静态文件到管道。

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

已经得到了我的代码队友,乔尔得到了答案 – Smithy