Wenn ich ein Bild hochladen ich diesen Fehler hatte:Wie behebe ich die Ausnahme "maximale Anforderungslänge überschritten"?
maximum request length exceeded
Wie kann ich dieses Problem beheben?
Wenn ich ein Bild hochladen ich diesen Fehler hatte:Wie behebe ich die Ausnahme "maximale Anforderungslänge überschritten"?
maximum request length exceeded
Wie kann ich dieses Problem beheben?
folgendes Datei web.config hinzufügen:
<configuration>
<system.web>
<httpRuntime maxRequestLength ="2097151"/>
</system.web>
</configuration>
Dieses es zu 2GB setzt. Nicht sicher, was das Maximum ist.
Sie können die maximale Länge von Anfragen in web.config unter <system.web>
erhöhen:
<httpRuntime maxRequestLength="100000" />
In diesem Beispiel wird die maximale Größe auf 100 MB.
Das ist keine großartige Möglichkeit, es zu tun, da Sie im Grunde Ihren Server zu DoS attacks öffnen, so dass Benutzer immense Dateien einreichen können. Wenn Sie wissen, dass der Benutzer nur Bilder einer bestimmten Größe hochladen soll, sollten Sie dies erzwingen, anstatt den Server für noch größere Übermittlungen zu öffnen.
Um dies zu tun, können Sie das Beispiel unten verwenden.
Da ich für den Posten eines Links gestöhnt wurde, habe ich hinzugefügt, was ich letztlich implementiert, mit dem, was ich von dem Link gelernt habe ich zuvor gepostet - und dies wurde getestet und funktioniert auf meiner eigenen Website ... es geht davon aus ein Standardlimit von 4 MB. Sie können entweder so etwas implementieren oder alternativ eine Art von ActiveX Steuerelement von Drittanbietern verwenden.
Beachten Sie, dass ich in diesem Fall den Benutzer auf die Fehlerseite umleiten, wenn ihre Einreichung zu groß ist, aber nichts hält Sie davon ab, diese Logik weiter anzupassen, wenn Sie dies wünschen.
Ich hoffe, es ist nützlich.
public class Global : System.Web.HttpApplication {
private static long maxRequestLength = 0;
/// <summary>
/// Returns the max size of a request, in kB
/// </summary>
/// <returns></returns>
private long getMaxRequestLength() {
long requestLength = 4096; // Assume default value
HttpRuntimeSection runTime = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection; // check web.config
if(runTime != null) {
requestLength = runTime.MaxRequestLength;
}
else {
// Not found...check machine.config
Configuration cfg = ConfigurationManager.OpenMachineConfiguration();
ConfigurationSection cs = cfg.SectionGroups["system.web"].Sections["httpRuntime"];
if(cs != null) {
requestLength = Convert.ToInt64(cs.ElementInformation.Properties["maxRequestLength"].Value);
}
}
return requestLength;
}
protected void Application_Start(object sender, EventArgs e) {
maxRequestLength = getMaxRequestLength();
}
protected void Application_End(object sender, EventArgs e) {
}
protected void Application_Error(object sender, EventArgs e) {
Server.Transfer("~/ApplicationError.aspx");
}
public override void Init() {
this.BeginRequest += new EventHandler(Global_BeginRequest);
base.Init();
}
protected void Global_BeginRequest(object sender, EventArgs e) {
long requestLength = HttpContext.Current.Request.ContentLength/1024; // Returns the request length in bytes, then converted to kB
if(requestLength > maxRequestLength) {
IServiceProvider provider = (IServiceProvider)HttpContext.Current;
HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
// Check if body contains data
if(workerRequest.HasEntityBody()) {
// Get the total body length
int bodyLength = workerRequest.GetTotalEntityBodyLength();
// Get the initial bytes loaded
int initialBytes = 0;
if(workerRequest.GetPreloadedEntityBody() != null) {
initialBytes = workerRequest.GetPreloadedEntityBody().Length;
}
if(!workerRequest.IsEntireEntityBodyIsPreloaded()) {
byte[] buffer = new byte[512000];
// Set the received bytes to initial bytes before start reading
int receivedBytes = initialBytes;
while(bodyLength - receivedBytes >= initialBytes) {
// Read another set of bytes
initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);
// Update the received bytes
receivedBytes += initialBytes;
}
initialBytes = workerRequest.ReadEntityBody(buffer, bodyLength - receivedBytes);
}
}
try {
throw new HttpException("Request too large");
}
catch {
}
// Redirect the user
Server.Transfer("~/ApplicationError.aspx", false);
}
}
Mögliche Duplikat [Maximale Anforderungslänge überschritten] (http://stackoverflow.com/questions/3853767/maximum-request-length-exceeded) – niico
Wie Niico sagte zum Beispiel, wenn Sie verwenden mehr als eine Zeile in Web.config, können Sie diesen Fehler erhalten. –
oguzhan