J'ai un site MVC3 en C #, j'ai une vue particulière étant alimenté par les paramètres de requête 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 elle doit utiliser le contrôle reportviewer , l'action alternative consiste à enregistrer certains paramètres dans ce cas, elle passe à la vue. (Peut élaborer plus si cela n'a pas de sens)
Le tout fonctionne bien jusqu'à ce que j'introduise [Authorize] à la méthode d'action. S'interrompt s'il est en place, fonctionne bien sans, et [Authorize] fonctionne bien sur toutes les autres méthodes.
L'URL entière dans ce cas fait 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 integer, 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é.
Aucune joie là-bas, alors je suis devenu ridicule et je l'ai fait 4096, toujours pas de joie.
Maintenant que l'URL entière mesure 966 caractères, l'attribut authorize ne peut pas sérieusement ajouter 1082-3130 caractères supplémentaires, alors comment puis-je déterminer quelle est réellement l'erreur ou pourquoi le paramètre ne prend pas effet.
VS2010 Pro SP1
la source
Réponses:
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 du formulaire d'autorisation, afin que je puisse 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'
<httpRuntime>
élément à l'intérieur de l'<system.web>
élément, voir Élément httpRuntime (schéma de paramètres ASP.NET) . Essayez de modifier cet élément.la source
À la racine
web.config
de votre projet, sous lesystem.web
nœud:De plus, j'ai dû ajouter ceci sous le
system.webServer
nœud ou j'ai eu une erreur de sécurité pour mes longues chaînes de requête:la source
maxQueryString
c'est la longueur en octets comme uint avec une valeur maximale de 4294967295 etmaxQueryStringLength
c'est la longueur en caractères comme int mais avec une plage de 0-2097151.Pour toute autre personne susceptible de rencontrer ce problème et qui n'est résolu par aucune des options ci-dessus, c'est ce qui a fonctionné pour moi.
J'avais désactivé cela parce que nous utilisions notre propre authentification, mais cela a conduit au même problème et la réponse acceptée n'a pas aidé en aucune façon.
la source
j'ai cette erreur en utilisant datatables.net
J'ai corrigé la modification de l'ajax par défaut Get to POST dans les propriétés de DataTable ()
la source