Je reçois l'erreur plutôt explicite:
Une valeur Request.Path potentiellement dangereuse a été détectée par le client (*).
Le problème est dû à *
dans l'URL de la demande:
https://stackoverflow.com/Search/test*/0/1/10/1
Cette URL est utilisée pour renseigner une page de recherche où "test *" est le terme recherché et le reste de l'URL concerne divers autres filtres.
Existe-t-il un moyen simple d'autoriser ces caractères spéciaux dans l'URL? J'ai essayé de modifier le web.config
, en vain.
Devrais-je encoder/décoder manuellement les caractères spéciaux? - mais cela peut être une option.
L'application elle-même est une application de formulaires Web c# asp.net
qui utilise le routage pour produire l'URL Nice ci-dessus.
Le caractère *
n'est pas autorisé dans le chemin de l'URL, mais son utilisation dans la chaîne de requête ne pose aucun problème:
http://localhost:3286/Search/?q=test*
Ce n'est pas un problème d'encodage, le caractère *
n'a pas de signification particulière dans une URL, donc peu importe si vous l'utilisez pour l'encoder. Vous auriez besoin de l'encoder en utilisant un schéma différent, puis de le décoder.
Par exemple, en utilisant un caractère arbitraire comme caractère d'échappement:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
Et décodage:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
Si vous utilisez .NET 4.0, vous devriez pouvoir autoriser ces URL via le web.config
<system.web>
<httpRuntime
requestPathInvalidCharacters="<,>,%,&,:,\,?" />
</system.web>
Remarque, je viens de supprimer l'astérisque (*), la chaîne par défaut d'origine est:
<httpRuntime
requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
Voir cette question pour plus de détails.
Vous devez coder la valeur de la route et ensuite (si nécessaire) la décoder avant la recherche.
Pour moi, je travaille sur .net 4.5.2 avec Web Api 2.0, J'ai la même erreur, je l’ai définie simplement en ajoutant requestPathInvalidCharacters = "" Dans requestPathInvalidCharacters, vous devez définir des caractères non autorisés vous devez supprimer les caractères à l'origine de ce problème.
<system.web>
<httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
<pages >
<namespaces>
....
</namespaces>
</pages>
</system.web>
** Notez que ce n'est pas une bonne pratique, il peut s'agir d'une publication avec ce paramètre, car l'attribut d'un objet est préférable ou essayez de coder le caractère spécial .-- Après avoir recherché la meilleure pratique pour la conception d'une api de repos, j'ai trouvé que dans la recherche, le tri et la pagination, nous devons gérer le paramètre de requête comme ceci
/companies?search=Digital%26Mckinsey
et ceci résout le problème lorsque nous encodons et le remplaçons sur l’url par% 26 De toute façon, sur le serveur, nous recevons le paramètre correct Digital & Mckinsey
ce lien peut vous aider à définir les meilleures pratiques de conception des sites Web reposants https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
Lorsque vous traitez avec des URL (Uniform Resource Locator), il existe certaines normes de syntaxe , dans cette situation particulière, nous traitons de Reserved Characters.
Jusqu'à RFC 3986 , les caractères réservés peuvent (ou non) être définis comme délimiteurs par la syntaxe générique, par chaque syntaxe spécifique au schéma ou par la syntaxe spécifique à l'implémentation de l'algorithme de déréférencement d'un URI; Et l'astérisque (*) est un caractère réservé.
La meilleure pratique consiste à utiliser Caractères non réservés dans les URL ou vous pouvez essayer de les encoder.
Continue à creuser :
Essayez de définir la propriété serveur du projet Web sur Local IIS s'il s'agit de IIS Express. Assurez-vous que l'URL du projet est correcte et créez un répertoire virtuel.
Cette exception s'est produite dans ma demande et était plutôt trompeuse.
Il a été lancé lorsque j'appelais une méthode Web de page .aspx à l'aide d'un appel de méthode ajax, en transmettant un objet de tableau JSON. La signature de la méthode de page Web contenait un tableau d'un objet .NET fortement typé, OrderDetails . La propriété Actual_Qty était définie en tant qu'int et la propriété Actual_Qty de l'objet JSON contenait "4" (caractère d'espace supplémentaire). Après la suppression de l’espace supplémentaire, la conversion a été rendue possible, la méthode de la page Web a été atteinte avec succès par l’appel ajax.
Pour moi, en tapant l'URL, un utilisateur a utilisé accidentellement un/au lieu de? pour démarrer les paramètres de requête
par exemple.:
url.com/endpoint/parameter=SomeValue&otherparameter=Another+value
qui aurait dû être:
url.com/endpoint?parameter=SomeValue&otherparameter=Another+value