Comment puis-je résoudre l'exception relative à la "longueur maximale de la demande dépassée"?
Quand j'upload une image que j'ai eu cette erreur:
longueur maximale de la requête dépassée
Comment puis-je résoudre ce problème?
3 réponses
ajouter ce qui suit à votre site web.fichier de configuration:
<configuration>
<system.web>
<httpRuntime maxRequestLength ="2097151"/>
</system.web>
</configuration>
cela le met à 2 Go. Pas certain de ce que le max est.
vous pouvez augmenter la durée maximale des requêtes sur le web.config, en vertu de l' <system.web>
:
<httpRuntime maxRequestLength="100000" />
cet exemple fixe la taille maximale à 100 Mo.
ce n'est pas une façon formidable de le faire car vous ouvrez votre serveur à les attaques de DoS permettant aux utilisateurs de soumettre immense fichiers. Si vous savez que l'utilisateur ne devrait Télécharger que des images d'une certaine taille, vous devriez appliquer cela plutôt que d'ouvrir le serveur à des soumissions encore plus grandes.
Pour ce faire vous pouvez utiliser l'exemple ci-dessous.
comme j'ai été réprimandé pour avoir posté un lien, j'ai ajouté ce que j'ai finalement implémenté en utilisant ce que J'ai appris du lien que j'ai posté précédemment - et cela a été testé et fonctionne sur mon propre site...il suppose une limite par défaut de 4 Mo. Vous pouvez soit mettre en œuvre quelque chose comme cela, ou bien employer une sorte de tiers ActiveX de contrôle.
notez que dans ce cas, je redirige l'utilisateur vers la page d'erreur si sa soumission est trop importante, mais rien ne vous empêche de personnaliser davantage cette logique si vous le souhaitez.
j'espère que c'est utile.
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);
}
}