2017-03-16 3 views
5

Ich habe eine ASP.NET Core MVC-Anwendung und im Ordner wwwroot habe ich einen anderen Ordner namens "Shaun" hinzugefügt und in diesem Ordner habe ich eine exe fallen gelassen versuchen und Download:ASP.NET Core - Download .exe gibt 404 Fehler

enter image description here

Nun, wenn ich zu navigieren: http://localhost:PORT/Shaun/chromesetup.exe ich einen 404 Fehler. Ich habe versucht, den Handler unten hinzuzufügen, aber das funktioniert nicht.

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

Zusätzliche Informationen: Der Grund, warum ich brauche, dies zu tun ist, weil ich eine Client-Anwendung, die auf dieser Website verbindet, ist, dass der Client-Anwendung mit Clickonce verpackt und wird in die wwwroot der Website fallen gelassen, dies vorher gearbeitet mit MVC (Pre Core) und tut es immer noch, aber nicht mit Kern.

Wie behebe ich das?

+0

Dies ist wahrscheinlich, weil die Dateierweiterung ist nicht erlaubt durch die Middleware StaticFileHandler. (Dotnet-Kern selbst haben StaticFileHandlerMiddleware) –

+0

@JoelHarkes Wie mache ich es erlaubt? – Smithy

+1

@Smity Ich habe eine Antwort für Sie –

Antwort

7

die folgenden Versuchen und mir sagen, ob es funktioniert:

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. 
} 

Sie im Sourcecode von StaticFileMiddleware schauen, um zu sehen, wie es statische Dateien verarbeitet.

Standardmäßig wird die FileExtensionContentTypeProvider verwendet, um basierend auf Dateinamenerweiterungen zu überprüfen, was ContentType in den Http Response-Headern zurückgegeben werden muss. exe ist nicht in dieser Liste.

So wäre eine weitere Option sein Exe zu dieser Liste hinzuzufügen:

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

Ihr erster Code funktioniert Kumpel, nur gehen, um das zweite Snippet jetzt zu testen! Kennst du den Unterschied zwischen ihnen? – Smithy

+0

@Smithy Wenn Sie meinen Text lesen, sollte es den Grund angeben. Für den ersten wird der defualt Content Type zurückgegeben –

+1

Yepp, zweiter Snippet funktioniert auch: D Ich nehme an, dass ServerUnknownFileTypes alles zurückgibt und das Hinzufügen von .exe zur Liste ist sicherer? – Smithy

0

Um für statische Dateien (EXE-Datei ist eine statische Dateityp) bedient werden, müssen Sie die Middleware konfigurieren statische hinzufügen Dateien in die Pipeline. Die statische Datei-Middleware kann durch Hinzufügen einer Abhängigkeit von dem Microsoft.AspNetCore.StaticFiles Paket zu einem Projekt und dann die UseStaticFiles Erweiterung konfiguriert werden Verfahren aus Startup.Configure Aufruf:

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

Das ist schon in meinem Code-Kumpel, Joel hat die Antwort – Smithy

Verwandte Themen