WCF GET URL Limite de longueur Problème: Demande incorrecte - URL non valide
J'ai essayé d'accéder à un Service WCF via AJAX de jQuery appel à la méthode GET. Alors, parfois, l'URL est longue avec des paramètres.
Lorsque les paramètres devient long, jQuery AJAX d'échec de l'Appel, et ne renvoie rien. Je mets donc un point de rupture et a pris l'URL à tester. Lorsque j'essaie la même URL dans le navigateur (j'ai essayé FireFox et Chrome), il renvoie les éléments suivants lors de la longueur de l'URL est trop longue.
Bad Request - URL non Valide
Erreur HTTP 400. L'URL de la requête n'est pas valide.
J'ai vérifié la limitation de longueur ainsi. Lorsque le nombre de caractères dans l'URL (en format codé) dépasse 1011 caractères (y compris http://) seulement, je reçois le message d'erreur.
Quelqu'un a la même situation et a trouvé une solution à cela? Est-il Windows Limitation ou Peut-il être géré par le biais de tous les paramètres par programme?
J'ai essayé la méthode POST, mais je ne sais pas, je ne pouvais pas le faire fonctionner. Parce qu'il a besoin de quelques web.les modifications de configuration.
MODIFIER
L'URL, j'ai Testé pour Générer l'Erreur
http://localhost:64973/Member.svc/SaveMemberWithDetail/%7B%22ID%22%7C%222%22,%22TypeID%22%7C%222%22,%22Title%22%7C%22Mr.%22,%22FirstName%22%7C%22Firnas%22,%22MiddleName%22%7C%22%22,%22LastName%22%7C%22Aliyar%22,%22Gender%22%7C%221%22,%22DateOfBirth%22%7C%222000-01-01%22,%22Nationality%22%7C%22Sri%20Lankan%22%7D/%5B%7B%22AddressLine1%22%7C%22Changed%20Address%20Line1%22,%22AddressLine2%22%7C%22Colombo%22,%22City%22%7C%22Colombo%2010%22,%22State%22%7C%22WP%22,%22PostCode%22%7C%2201000%22,%22CountryID%22%7C%221%22,%22ID%22%7C%227%22,%22TypeID%22%7C%221%22%7D%5D/%5B%7B%22Telephone%22%7C%22015154645%22,%22TypeID%22%7C%221%22%7D%5D/%5B%7B%22EmailAddress%22%7C%22gen1@dfs%22,%22ID%22%7C%2226%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%22gen2@jfasd%22,%22ID%22%7C%2227%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2228%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2229%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2229%22,%22TypeID%22%7C%221%22%7D%5D/%7B%7D/481
Clair version d'URL:
http://localhost:64973/Member.svc/SaveMemberWithDetail/{"ID"|"2","TypeID"|"2","Title"|"Mr.","FirstName"|"Firnas","MiddleName"|"","LastName"|"Aliyar","Gender"|"1","DateOfBirth"|"2000-01-01","Nationality"|"Sri Lankan"}/[{"AddressLine1"|"Changed Address Line1","AddressLine2"|"Colombo","City"|"Colombo 10","State"|"WP","PostCode"|"01000","CountryID"|"1","ID"|"7","TypeID"|"1"}]/[{"Telephone"|"015154645","TypeID"|"1"}]/[{"EmailAddress"|"gen1@dfs","ID"|"26","TypeID"|"1"},{"EmailAddress"|"gen2@jfasd","ID"|"27","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"28","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"}]/{}/481
Mes Paramètres sont définis, des Objets Json. Je ne pense pas que l'un des personnages à l'origine du problème, parce que, si je viens de le réduire à quelques caractères alpha numériques, à moins que la limite, il fonctionne.
Je suis en cours d'exécution de mon application dans Visual Studio Premium 2012 dans Windows 8 Professionnel, il est donc .NET 4.5 et IIS Express est Venu avec elle.
D'Autres Recherches
Quand j'essaie de les étudier de plus, ce n'est pas la limitation que j'ai déjà mentionnés, qui est la longueur de l'url complète. Mais, il y a une limitation de la longueur de chaque paramètre qui est de 260 caractères.
Donc, je ne suis pas sûr URL longueur totale, mais chaque paramètre (séparés par des "/") a la limite. Le problème avec l'URL ci-dessus que j'ai posté est l'Adresse Email JSON paramètre est de 261 caractères, donnée ci-dessous.
[{"EmailAddress"|"gen1@dfs","ID"|"26","TypeID"|"1"},{"EmailAddress"|"gen2@jfasd","ID"|"27","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"28","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"}]
Si je supprime 1 caractère de ce fait, il fonctionne.
Est un Navigateur Limitation? Limitations des systèmes d'exploitation?
MISE À JOUR: SOLUTION
J'ai Trouvé une solution qui a fonctionné pour moi, quand je fais des recherches supplémentaires sur ce. Je suis à jour ici, car il pourrait être utile pour d'autres personnes qui viennent à travers cette question.
C'est un Paramètre IIS
Le problème est que, la limite de caractères par défaut de chaque paramètre dans l'url REST est de 260 qui est définie dans le registre.
Donc, vous devez mettre à jour le registre d'augmenter cette limite de taille où le Serveur IIS /IIS Express est en cours d'exécution.
Qui suit est l'emplacement de Registre:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
Et le nom de la valeur est UrlSegmentMaxLength
. Si elle n'existe pas, créez-en un avec le Type de REG_DWORD
. Et de spécifier une valeur plus élevée pour value data
comme 1000 en hexadécimal ou 4096 en décimal.
C'est un http.sys le réglage. Plus sur http.sys paramètres : http://support.microsoft.com/kb/820129
Assurez-vous que vous redémarrez le serveur/la machine pour appliquer les modifications du registre.
Et c'est tout.
source d'informationauteur Firnas
Vous devez vous connecter pour publier un commentaire.
Reposter la mise à jour comme Réponse, puisque certains d'entre vous peut sauter directement dans la section Réponses.
J'ai Trouvé une solution qui a fonctionné pour moi, quand je fais des recherches supplémentaires sur ce. Je suis à jour ici, car il pourrait être utile pour d'autres personnes qui viennent à travers cette question.
C'est un Paramètre IIS
Le problème est que, la limite de caractères par défaut de chaque paramètre dans l'url REST est de 260 qui est définie dans le registre.
Donc, vous devez mettre à jour le registre d'augmenter cette limite de taille où le Serveur IIS /IIS Express est en cours d'exécution.
Qui suit est l'emplacement de Registre:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
Et le nom de la valeur est UrlSegmentMaxLength. Si elle n'existe pas, créez-en un avec Type REG_DWORD. Et de spécifier une valeur plus élevée pour les données de valeur tels que les 1000 en hexadécimal ou 4096 en décimal.
C'est un http.sys le réglage. Plus sur http.sys paramètres : http://support.microsoft.com/kb/820129
Assurez-vous que vous redémarrez le serveur/la machine pour appliquer les modifications du registre. Et c'est tout.
Un couple de choses à penser:
1) Vous ne devriez pas utiliser un GET à voir avec la sauvegarde des données, de l'utilisation POST lorsque cela est possible. La principale raison a à voir avec la sécurité. À l'aide de GET vous ouvre de plus le potentiel des attaques CSRF. Gardez à l'esprit que le POST n'est pas à l'abri des CSRF, mais il aide à diminuer la vulnérabilité un peu.
2) en Regardant l'URL, les virgules place pour moi et peut-être pourquoi vous obtenez l'URL non valide erreurs.
3) Quelle est la version de IIS êtes-vous en cours d'exécution en vertu de l'? Cela peut déterminer ce que vous devez faire pour augmenter le max de Longueur d'URL.
Pour IIS7 vous pouvez ajouter au Système.Web dans le fichier de configuration:
EDIT:
Vous devriez essayer de le changer pour un POSTE à nouveau car il ne tentera pas de mappage à un système de fichiers.
De MSDN l'api windows permet seulement 260.
Par l'édition de l'etat-il a résolu mon problème de la mauvaise Demande 400, mais stil ne fonctionne pas pour moi jusqu'à ce que j'ai ajouté,
pour la note j'ai essayé d'ajouter cette configuration avant d'éditer mon etat mais il ne fonctionne pas donc je suppose qu'après l'édition de l'Etat et avec cette config je l'ai installé.
peut-il aider quelqu'un d'autre.
L'ajout d'une autre réponse juste pour être complet. Dans mon cas, j'ai eu toutes les bonnes valeurs dans le web.config:
Cependant, j'étais encore en train de les 400 erreur sur l'un des serveurs IIS. Après une enquête plus approfondie et de configuration de comparaison, il s'est avéré que le UrlScan module IIS était le coupable. Par la désinstallation du module ou de la modification de la UrlScan.fichier ini pour modifier la longueur maximum des valeurs, le problème a été résolu:
La solution ci-dessus a fonctionné pour moi avec:
maxQueryStringLength="3000" maxUrlLength="3000"
Et le correctif de registre ci-dessus.