Comment configurer le web.config pour autoriser les requêtes de n'importe quelle longueur


138

Je construis un site dans lequel je voudrais créer un fichier côté client à partir de la valeur d'un élément textarea.

J'ai le code en place pour le faire, mais j'obtiens cette erreur

Erreur HTTP 404.15 - introuvable Le module de filtrage des demandes est configuré pour refuser une demande dont la chaîne de requête est trop longue.

Existe-t-il un moyen de contourner cela afin que je puisse traiter les demandes de n'importe quelle taille?

Sinon, existe-t-il un moyen de générer des fichiers côté client sans utiliser le système de fichiers / l'objet x actif?

Merci


8
Ce que vous voulez prendre en compte, c'est que même si la longueur de la chaîne de requête peut être configurable pour IIS ou votre application, il existe une norme HTTP pour la longueur d'URL. Puisque vous utilisez une chaîne de requête, vous transmettez des valeurs dans le cadre de l'URL. La longueur maximale des caractères de l'URL est de 2000 caractères. Si vos valeurs doivent être de longues chaînes, il est préférable de POSTER les valeurs plutôt que de les transmettre dans la chaîne de requête.
Jeff LaFay

2
D'accord avec Jlafay. Il est recommandé de POSTER les valeurs lorsque vous avez plus de 2-3 paramètres simples. et lorsque vous utilisez une chaîne de requête, assurez-vous de les chiffrer.
Jack

Réponses:


244

Ajoutez ce qui suit à votre web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

Voir:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

Mis à jour pour refléter les commentaires.

requestLimits, élément pour requestFiltering [schéma des paramètres IIS]

Vous devrez peut-être ajouter ce qui suit dans votre web.config également

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

Voir: Élément httpRuntime (schéma de paramètres ASP.NET)

Bien sûr, les nombres (32768 et 65536) dans les paramètres de configuration ci-dessus ne sont que des exemples. Vous n'êtes pas obligé d'utiliser ces valeurs exactes.


24
Cela seul ne me suffisait pas. J'ai dû également ajouter ceci à la section system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnn est la longueur de chaîne maximale que vous souhaitez autoriser, par exemple 32768
Matt Varblow


J'ai essayé chacun d'eux individuellement, en définissant le nœud de sécurité sous system.webServer, puis en supprimant et en ajoutant simplement les attributs au nœud httpRuntime. J'avais vraiment besoin des deux pour travailler. Merci beaucoup!
David Gunderson

2
Remarque: la balise <httpRuntime> passe sous <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

33

Dans mon cas (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 app / .Net Framework 4.5), ce qui fonctionnait vraiment après 30 minutes d'essais et d'erreurs était de définir la maxQueryStringLengthpropriété dans la <httpRuntime>balise:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLengthpar défaut 2048.

En savoir plus ici:

Élargir la plage d'URL autorisées


J'ai essayé de le configurer <system.webServer>comme le suggère @MattVarblow , mais cela n'a pas fonctionné ... et c'est parce que j'utilise IIS Express (basé sur IIS 8) sur ma machine de développement avec Windows 8.

Lorsque j'ai déployé mon application dans l'environnement de production (Windows Server 2008 R2 avec IIS 7), IE 10 a commencé à renvoyer des erreurs 404 dans les demandes AJAX avec de longues chaînes de requête. Ensuite, j'ai pensé que le problème était lié à la chaîne de requête et j'ai essayé la réponse de @ MattVarblow. Cela a juste fonctionné sur IIS 7. :)


2
Pour moi, c'est le enable = "true" qui a fait la magie
opérer

6

Autre chose à vérifier: si votre site utilise MVC, cela peut arriver si vous avez ajouté [Authorize] à votre classe de contrôleur de connexion. Il ne peut pas accéder à la méthode de connexion car elle n'est pas autorisée, donc il redirige vers la méthode de connexion -> boom.


Merci! J'ai rencontré ce problème car j'ai déplacé le menu / navigation vers une vue partielle et un autre contrôleur qui n'autorisait pas les connexions anonymes.
Westerlund.io

Un autre cas où le message d'erreur, bien que vrai, n'a aucun rapport avec le problème réel.
Steve Smith

1
Vérifiez également les propriétés du projet, car il se peut que l'authentification Windows soit «activée» et que l'authentification anonyme soit désactivée ». Veuillez consulter cet article détaillé - Erreur (Visual Studio 2013, MVC5): Le module de filtrage des demandes est configuré pour refuser une demande où la chaîne de requête est trop longue
fujiFX

5

Si vous rencontrez ce problème lors de l'exécution d'un serveur Web IIS 8.5, vous pouvez utiliser la méthode suivante.

Tout d'abord, recherchez le module "Request Filtering" dans le site IIS sur lequel vous travaillez, puis double-cliquez dessus ...

entrez la description de l'image ici

Ensuite, vous devez faire un clic droit dans la zone blanche ci-dessous, puis cliquer sur l'option du menu contextuel appelée "Modifier les paramètres de la fonctionnalité" .

entrez la description de l'image ici

Ensuite, la dernière chose à faire est de changer la valeur "Chaîne de requête maximale (octets)" de 2048 à quelque chose de plus approprié tel que 5000 pour vos besoins.

entrez la description de l'image ici


Merci, c'est la solution la plus simple et la plus fonctionnelle pour moi
Afif Zafri

Merci mon pote!!!!!
Noobie

0

J'ai eu un problème similaire en essayant de déployer une application Web ASP sur IIS 8. Pour le résoudre, j'ai fait comme Matt et Leniel l'ont suggéré ci-dessus. Mais j'ai également dû configurer le paramètre d'authentification de mon site pour activer l'authentification anonyme. Et cela a fonctionné pour moi.


0

J'ai dû ajouter [AllowAnonymous] aux fonctions ActionResult dans ma page de connexion car l'utilisateur n'était pas encore authentifié.


0

Si votre site Web utilise l'authentification, mais que vous n'avez pas configuré la méthode d'authentification correcte dans IIS (par exemple, Basic, Forms, etc.), le navigateur sera bloqué dans une boucle de redirection. Cela fait que l'URL de redirection s'allonge de plus en plus jusqu'à ce qu'elle explose.


0

Cela générera également une erreur lorsque vous passerez une grande chaîne dans le paramètre d'appel ajax.

donc pour cela, utilisez toujours le type post dans ajax pour résoudre votre problème à 100% et il n'est pas nécessaire de définir la longueur dans web.config.

// var UserId = tableau de 1000 userids

$ .ajax ({global: false, url: SitePath + "/ User / getAussizzMembersData", "data": {UserIds: UserId}, "type": "POST", "dataType": "JSON"}}


-1

Erreur HTTP 404.15 - introuvable Le module de filtrage des demandes est configuré pour refuser une demande dont la chaîne de requête est trop longue.

Pour résoudre ce problème, vérifiez dans le code source si la Formbalise a une propriété methodest l'état get / set.

Si tel est le cas, la methodpropriété doit être supprimée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.