Anwendung kann Fehler in OnError aufzeichnen, aber wir sind nicht in der Lage, irgendwelche Redirects zu machen, um dem Benutzer etwas Bedeutsames zu zeigen. Irgendwelche Ideen? Ich weiß, dass wir MaxRequestLength in web.config festlegen können, aber trotzdem kann der Benutzer dieses Limit überschreiten und einige normale Fehler angezeigt werden.ASP.NET - Wie zeigt man beim Hochladen einer großen Datei eine Fehlerseite an (maximale Anforderungslänge überschritten)?
Antwort
Wie Sie sagen, können Sie MaxRequestLength in Ihrer web.config (Überschreiben der Standard 4 MB von Ihrer machine.config) und wenn diese Grenze überschritten wird erhalten Sie normalerweise einen HTTP 401.1 Fehler. werden der Benutzer gezeigt wird umgeleitet
<system.web>
<customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx />
</system.web>
Jedesmal, der Fehler:
Um einen generischen HTTP-Fehler auf Anwendungsebene zu behandeln können Sie im Abschnitt system.web in Ihrem web.config ein Custom Abschnitt Setup zu Ihrer benutzerdefinierten Fehlerseite.
Wenn Sie eine spezielle Seite für jeden Fehler, den Sie so etwas wie tun:
<system.web>
<customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx">
<error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>
</system.web>
Und so weiter.
Alternativ können Sie die Registerkarte CustomErrors Ihrer virtuellen Verzeichniseigenschaften von IIS bearbeiten, um auf die Fehlerbehandlungsseiten Ihrer Wahl zu zeigen.
Die oben scheint nicht für 401.x Fehler zu arbeiten - dieser Code-Projekt Artikel beschreibt eine Lösung für ein, was ein sehr ähnliches Problem zu sein scheint: Redirecting to custom 401 page
Sie könnten die Länge der geposteten Datei überprüfen (FileUpload.PostedFile.ContentLength), um zu sehen, ob sie unter dem Limit liegt oder nicht und einfach eine freundliche Fehlermeldung zeigt, falls nötig.
funktioniert nicht - asp.net kann nicht an diesen Punkt gelangen. – st78
Okay, das ist neu für mich, ich dachte, du kannst zuerst die Inhaltslänge überprüfen, als dich entschließen, die Datei hochzuladen/abzulehnen. –
Danke für die Info, ich habe es gerade überprüft und es scheitert. Gut zu wissen, wie ich es vorher benutzt habe und nicht bemerkt habe, dass es ein Problem damit gibt. –
Sie sollten den Fehler im Global.asax - OnError() - Handler abfangen können. Leider ist Ihre erste Anfrage beendet und Sie können die Upload-Seite nicht mit einer Fehlermeldung für den Benutzer rendern.
Was Sie höchstens tun können, ist eine freundliche Fehlerseite mit einer einfachen Redirect-Klausel aus dem Handler OnError() anzuzeigen und auf dieser Seite einen Backlink oder eine ähnliche Funktion zu haben, um den Benutzer auf die Seite zurückzubringen, auf der er den Fehler ausgelöst hat Fehler an erster Stelle.
Update:
ich vor kurzem genaue Kontrolle auf Datei-Upload implementieren musste und was ich mit aufkam ist SWFUpload Bibliothek, die völlig meine Anforderungen erfüllt und hat auch eine Menge von zusätzlichen Funktionen. Ich habe es zusammen mit jQuery Wrapper von Steve Sanderson verwendet. Weitere Details finden Sie unter here.
Der Punkt ist, dass Flash die Dateigröße auf Client-Seite erkennen und richtig reagieren kann, wenn dieser Fall erfüllt ist. Und ich denke, das ist genau das, was du brauchst.
Weiterhin können Sie die Flash-Erkennung überprüfen, wenn Sie möchten, native Upload Schaltfläche Button0, falls Client nicht Flash installiert hat.
Das stimmt, ich bin in der Lage, Ausnahme in OnError zu fangen, jedoch Response.Redirect() nichts tun. – st78
Leider werden Sie wahrscheinlich IIS7 benötigen und dies mit einem benutzerdefinierten Handler abfangen, da IIS6 nie zu der Stufe kommen wird, wo er die Größe der Datei sehen kann. Es kann nur die Größe wissen, wenn es hochgeladen wurde oder einen Fehler hat.
Dies ist ein bekanntes Problem in ASP.NET. Eine andere (lahme) Alternative ist, dies früher in der Anfrage zu handhaben und vielleicht einen Flash-basierten Uploader zu verwenden. John Links zu mehreren in der folgenden Verbindung.
aktualisieren: Jon Galloway schien looked deeper into this problem zu haben, und es scheint, wie ein RIA-Uploader die einzig sinnvolle Alternative ist, da IIS scheint immer die Datei schlucken müssen und dann Sie sagen, dass es zu groß ist.
Unser Server führt IIS7, können Sie einige Links/Keywords bereitstellen, wo Sie nach einer Antwort suchen können, wie Sie dieses Problem beheben können? – st78
Sergei,
Per JohnIdol des Antwort, Sie müssen eine benutzerdefinierte Fehlerseite für den Statuscode einrichten. z.B .:
<customErrors mode="On" defaultRedirect="~/Errors/Error.aspx">
<error statusCode="413" redirect="~/Errors/UploadError.aspx"/>
</customErrors>
Ich weiß, weil ich das gleiche Problem auf einem Client-Projekt zu lösen hatte, und das war die Lösung, die für mich gearbeitet. Leider war es die einzige Lösung, die ich fand ... es war nicht möglich, dieses spezielle Problem im Code zu finden; B. die Länge der geposteten Datei überprüfen, wie es snomag vorgeschlagen hat, oder einen Fehler in global.asax abfangen. Wie du, hatte ich auch diese anderen Ansätze ausprobiert, bevor ich eine funktionierende Lösung hatte. (Tatsächlich fand ich das irgendwann irgendwo im Internet, als ich an meinem Problem arbeitete).
Hoffe, dass hilft.
Seltsam, ich bekomme Fehler 500 nach 'Maximale Anfrage Länge überschritten'. –
Die beste Möglichkeit, große Uploads zu verarbeiten, ist die Verwendung einer Lösung, die ein HttpModule implementiert, das die Datei in Blöcke aufteilt. Bei allen vorinstallierten Lösungen sollte die Dateigröße begrenzt werden. Viele andere haben Links zu denen auf dieser Seite gepostet, also werde ich nicht stören. Wenn Sie sich jedoch nicht damit befassen möchten, können Sie dies im Ereignis Global.asax Application_Error Ihrer App behandeln. Wenn Ihre Anwendung in dort .NET 4.0, bleiben diese Code-Block ist:
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(HttpException) && ((HttpException)ex.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
//Handle and redirect here, you can use Server.ClearError() and Response.Redirect("FileTooBig.aspx") or whatever you choose
}
Wenn Sie auf einem früheren Rahmen laufen lassen, versuchen, den Code hier (es ist in VB, aber es ist einfach zu übersetzen): http://www.webdeveloper.com/forum/showthread.php?t=52132
Danke, dies ist eine vollständige Anleitung über die Handhabung von Fehlern, ich am Ende genau mit dem gleichen Stück xml. Dies hilft jedoch nicht, wenn die Anforderungslänge überschritten wird. – st78
Sehen Sie die letzte Bearbeitung und lassen Sie mich wissen, wenn Sie etwas finden – JohnIdol
Für diejenigen, die zu dieser Seite kommen und nicht wissen, wie man maxRequestLength einrichten: [MSDN] (http://msdn.microsoft.com/en-us/ library/e1f13641.aspx) –