entrez la description de l'image ici
J'ai un site MVC3 en C #, j'ai une vue particulière étant alimentée en paramètres de requête à partir d'une fonction JavaScript, la fonction redirige vers le site via

window.location.href = "../ActionName?" + query_string;

Query_string étant la chaîne de paramètres de requête dynamique créée par la fonction JavaScript.

La raison de cette bizarrerie est que parfois la même fonction transmet l'URL à un formulaire Web ASP.Net car il doit utiliser le contrôle reportviewer , l'autre action consiste à enregistrer certains paramètres dans ce cas, il passe à la vue. (Peut élaborer davantage si cela n'a pas de sens)

Le tout fonctionne bien jusqu'à ce que j'introduise [Autoriser] à la méthode d'action. Se casse s'il est en place, fonctionne correctement sans et [Autoriser] fonctionne correctement avec toutes les autres méthodes.

L'URL entière dans ce cas est longue de 966 caractères, après recherche, il semble que la valeur maxQueryStringLength soit 2048 par défaut mais peut être remplacée par n'importe quelle valeur de type entier, donc juste pour les sourires, j'ai ajouté le

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

Clé du fichier de configuration Web sous la clé.

Pas de joie là-bas, alors je suis devenu ridicule et je l'ai fait 4096, toujours pas de joie.

Maintenant que l'URL entière contient 966 caractères, l'attribut authorize ne peut pas sérieusement ajouter un autre 1082-3130 caractères, alors comment puis-je déterminer ce qu'est réellement l'erreur ou pourquoi le paramètre ne prend pas effet.

VS2010 Pro SP1

120
Sabre 17 nov. 2011 à 01:57

4 réponses

Meilleure réponse

Lorsqu'une demande non autorisée arrive, la demande entière est encodée en URL et ajoutée en tant que chaîne de requête à la demande dans le formulaire d'autorisation, donc je peux voir où cela peut entraîner un problème compte tenu de votre situation.

Selon MSDN, l'élément correct à modifier pour réinitialiser maxQueryStringLength dans web.config est l'élément <httpRuntime> à l'intérieur de l'élément <system.web>, voir Élément httpRuntime (schéma des paramètres ASP.NET). Essayez de modifier cet élément.

70
Eat at Joes 27 nov. 2012 à 19:27

Pour quiconque peut rencontrer ce problème et il n'est résolu par aucune des options ci-dessus, c'est ce qui a fonctionné pour moi.

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

J'avais désactivé cela parce que nous utilisions notre propre Auth, mais cela a conduit à ce même problème et la réponse acceptée n'a aidé en aucune façon.

5
dball 5 août 2014 à 20:20

Dans la racine web.config de votre projet, sous le nœud system.web:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

De plus, j'ai dû ajouter ceci sous le nœud system.webServer ou j'ai eu une erreur de sécurité pour mes longues chaînes de requête:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...
208
theJerm 9 juil. 2014 à 19:06

J'ai cette erreur en utilisant datatables.net

J'ai corrigé la modification de la valeur par défaut ajax Get to POST dans les propriétés de DataTable ()

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },
4
Ruben Bartelink 27 janv. 2016 à 14:00
8159321