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
4 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 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.
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.
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>
...
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"
},
Questions connexes
Questions liées
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.