web-dev-qa-db-fra.com

demande dépasse la maxQueryStringLength configurée lors de l'utilisation de [Authorize]

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

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

query_string étant la chaîne de paramètres de requête dynamique généré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 elle doit utiliser le contrôle reportviewer, l'action alternative consiste à enregistrer certains paramètres, dans ce cas, elle est transmise. à la vue. (Peut élaborer plus si cela n'a pas de sens)

Le tout fonctionne bien jusqu'à ce que je présente [Authorize] à la méthode d'action. Breaks si elle est en place, fonctionne correctement sans et [Autoriser] fonctionne correctement pour toutes les autres méthodes.

L'URL complète dans ce cas est longue de 966 caractères. Après des recherches, il semble que la valeur maxQueryStringLength soit 2048 par défaut, mais elle peut être remplacée par n'importe quelle valeur de type entier.

<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 l'ai rendu 4096, toujours pas de joie.

Maintenant, l'URL entière ayant une longueur de 966 caractères, l'attribut authorize ne peut pas sérieusement ajouter 1082-3130 caractères supplémentaires. Comment puis-je déterminer quelle est l'erreur réellement ou pourquoi le paramètre ne prend pas effet?.

VS2010 Pro SP1

118
Sabre

Lorsqu'une demande non autorisée arrive, l'intégralité de la demande est encodée en URL et ajoutée en tant que chaîne de requête à la demande du formulaire d'autorisation. Je peux donc voir où cela peut poser problème, selon votre situation.

Selon MSDN, l'élément correct à modifier pour réinitialiser maxQueryStringLength dans web.config est le <httpRuntime> élément à l'intérieur du <system.web> element, voir Elément httpRuntime (schéma ASP.NET Settings) . Essayez de modifier cet élément.

69
counsellorben

Dans la racine web.config pour votre projet, sous le system.web noeud:

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

De plus, je devais ajouter ceci sous le system.webServer noeud 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>
...
199
theJerm

Pour toute autre personne susceptible de rencontrer ce problème et qui ne soit résolu par aucune des options ci-dessus, voici 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 au même problème et la réponse acceptée n'a aucunement aidé.

5
dball

j'ai cette erreur en utilisant datatables.net

j'ai corrigé en changeant le ajax par défaut Get to POST dans les propriétés du DataTable ()

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },
4
elblogdelbeto