Ich schreibe eine Upload-Funktion und habe Probleme beim Abfangen von "System.Web.HttpException: Maximale Anforderungslänge überschritten" mit Dateien, die größer als die httpRuntime
in web.config angegebene maximale Größe sind (maximale Größe auf 5120 festgelegt). Ich benutze eine einfache <input>
für die Datei.
Das Problem ist, dass die Ausnahme vor dem Klickereignis der Upload-Schaltfläche ausgelöst wird und die Ausnahme auftritt, bevor mein Code ausgeführt wird. Wie kann ich die Ausnahme abfangen und behandeln?
BEARBEITEN: Die Ausnahme wird sofort ausgelöst, daher bin ich mir ziemlich sicher, dass es sich aufgrund langsamer Verbindungen nicht um ein Timeout-Problem handelt.
c#
asp.net
httpexception
Marcus L.
quelle
quelle
<input type="file" id="upload" name="upload" onchange="showFileSize();" />
InsideshowFileSize()
eine Fehlermeldung basierend auf Ihrer Dateigröße übervar input = document.getElementById("upload"); var file = input.files[0];
ein HTML-Tag anzeigen und anhängen.Antworten:
Es gibt leider keine einfache Möglichkeit, eine solche Ausnahme zu erwischen. Ich überschreibe entweder die OnError-Methode auf Seitenebene oder den Application_Error in global.asax, überprüfe dann, ob es sich um einen Max Request-Fehler handelt, und übertrage ihn in diesem Fall auf eine Fehlerseite.
Es ist ein Hack, aber der folgende Code funktioniert für mich
quelle
httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge
- mit System.Web.Management.WebEventCodesWie GateKiller sagte, müssen Sie die maxRequestLength ändern. Möglicherweise müssen Sie auch das ExecutionTimeout ändern, falls die Upload-Geschwindigkeit zu langsam ist. Beachten Sie, dass keine dieser Einstellungen zu groß sein soll, da Sie sonst für DOS-Angriffe offen sind.
Der Standardwert für das ExecutionTimeout ist 360 Sekunden oder 6 Minuten.
Sie können die maxRequestLength und das ExecutionTimeout mit dem httpRuntime-Element ändern .
BEARBEITEN:
Wenn Sie die Ausnahme trotzdem behandeln möchten, müssen Sie sie, wie bereits erwähnt, in Global.asax behandeln. Hier ist ein Link zu einem Codebeispiel .
quelle
Sie können dies lösen, indem Sie die maximale Anforderungslänge in Ihrer web.config erhöhen:
Das obige Beispiel gilt für ein Limit von 100 MB.
quelle
Wenn Sie auch eine clientseitige Validierung wünschen, damit Sie weniger Ausnahmen auslösen müssen, können Sie versuchen, eine clientseitige Validierung der Dateigröße zu implementieren.
Hinweis: Dies funktioniert nur in Browsern, die HTML5 unterstützen. http://www.html5rocks.com/de/tutorials/file/dndfiles/
quelle
Hallo Lösung von Damien McGivern erwähnt, funktioniert nur auf IIS6,
Es funktioniert nicht unter IIS7 und ASP.NET Development Server. Auf der Seite wird "404 - Datei oder Verzeichnis nicht gefunden" angezeigt.
Irgendwelche Ideen?
BEARBEITEN:
Verstanden ... Diese Lösung funktioniert immer noch nicht auf ASP.NET Development Server, aber ich habe den Grund, warum sie in meinem Fall nicht auf IIS7 funktioniert hat.
Der Grund dafür ist, dass in IIS7 ein Anforderungsscan integriert ist, der eine Obergrenze für die Upload-Datei auferlegt, die standardmäßig 30000000 Byte (etwas weniger als 30 MB) beträgt.
Und ich habe versucht, eine Datei mit einer Größe von 100 MB hochzuladen, um die von Damien McGivern erwähnte Lösung zu testen (mit maxRequestLength = "10240", dh 10 MB in web.config). Wenn ich jetzt eine Datei mit einer Größe von> 10 MB und <30 MB hochlade, wird die Seite auf die angegebene Fehlerseite umgeleitet. Wenn die Dateigröße jedoch> 30 MB ist, wird auf der hässlichen integrierten Fehlerseite "404 - Datei oder Verzeichnis nicht gefunden" angezeigt.
Um dies zu vermeiden, müssen Sie die max. Zulässige Länge des Anforderungsinhalts für Ihre Website in IIS7. Dies kann mit dem folgenden Befehl erfolgen:
Ich habe die max eingestellt. Inhaltslänge bis 200 MB.
Nach dieser Einstellung wird die Seite erfolgreich auf meine Fehlerseite umgeleitet, wenn ich versuche, eine Datei mit 100 MB hochzuladen
Weitere Informationen finden Sie unter http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx .
quelle
Hier ist eine alternative Methode, die keine "Hacks" beinhaltet, sondern ASP.NET 4.0 oder höher erfordert:
quelle
Eine Möglichkeit, dies zu tun, besteht darin, die maximale Größe in web.config festzulegen, wie oben bereits angegeben, z
Wenn Sie dann das Upload-Ereignis behandeln, überprüfen Sie die Größe. Wenn es über einem bestimmten Betrag liegt, können Sie es abfangen, z
quelle
Eine Lösung, die mit IIS7 und höher funktioniert: Zeigen Sie eine benutzerdefinierte Fehlerseite an, wenn das Hochladen von Dateien die zulässige Größe in ASP.NET MVC überschreitet
quelle
In IIS 7 und darüber hinaus:
Datei web.config:
Sie können dann den Code dahinter wie folgt einchecken:
Stellen Sie einfach sicher, dass die [Größe in Bytes] in der web.config größer ist als die Größe der Datei, die Sie hochladen möchten. Andernfalls wird der Fehler 404 nicht angezeigt. Sie können dann die Dateigröße im Code hinter der ContentLength überprüfen, was viel besser wäre
quelle
Wie Sie wahrscheinlich wissen, wird die maximale Anforderungslänge an ZWEI Stellen konfiguriert .
maxRequestLength
- Auf ASP.NET-App-Ebene gesteuertmaxAllowedContentLength
- unter<system.webServer>
, auf IIS-Ebene kontrolliertDer erste Fall wird durch andere Antworten auf diese Frage abgedeckt.
Um THE SECOND ONE zu fangen , müssen Sie dies in global.asax tun:
quelle
Nach dem Tag
Fügen Sie das folgende Tag hinzu
Sie können die URL zur Fehlerseite hinzufügen ...
quelle
Sie können dies lösen, indem Sie die maximale Anforderungslänge und Ausführungszeit in Ihrer web.config erhöhen:
-Bitte klären Sie die maximale Ausführungszeit von mehr als 1200
quelle
Wie wäre es mit einem EndRequest-Event?
quelle
Es kann überprüft werden über:
quelle