2017-03-16 39 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