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û à *
l'URL de demande:
https://stackoverflow.com/Search/test*/0/1/10/1
Cette URL est utilisée pour remplir une page de recherche où «test *» est le terme de recherche et le reste de l'URL se rapporte à 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.
Dois-je encoder / décoder manuellement les caractères spéciaux? Ou existe-t-il une meilleure pratique pour ce faire, je voudrais éviter d'utiliser des chaînes de requête. - mais cela peut être une option.
L'application elle-même est une c# asp.net
application de formulaires Web qui utilise le routage pour produire la belle URL ci-dessus.
ValidateRequest=false
en haut?Réponses:
Le
*
caractère n'est pas autorisé dans le chemin de l'URL, mais il n'y a aucun problème à l'utiliser dans la chaîne de requête: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 votre URL l'encode ou non. Vous devez l'encoder à l'aide d'un schéma différent, puis le décoder.Par exemple, en utilisant un caractère arbitraire comme caractère d'échappement:
Et décodage:
la source
PATH
et non dans la chaîne de requête.aa
<=>a
etab
<=>*
comme schéma de codage plus simple?Si vous utilisez .NET 4.0, vous devriez pouvoir autoriser ces URL via le web.config
Remarque, je viens de supprimer l'astérisque (*), la chaîne par défaut d'origine est:
Voir cette question pour plus de détails.
la source
Pour moi, je travaille sur .net 4.5.2 avec l'API Web 2.0, j'ai la même erreur, je l'ai définie simplement en ajoutant requestPathInvalidCharacters = "" dans le requestPathInvalidCharacters vous devez définir des caractères non autorisés sinon vous devez supprimer des caractères qui provoquer ce problème.
** Notez que ce n'est pas une bonne pratique, peut être 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é les meilleures pratiques pour la conception d'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
et cela 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 aider sur les meilleures pratiques de conception d'api web de repos https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
la source
Vous devez coder la valeur de l'itinéraire et ensuite (si nécessaire) décoder la valeur avant de rechercher.
la source
Pour moi, lors de la saisie de l'URL, un utilisateur a accidentellement utilisé un / au lieu d'un? pour démarrer les paramètres de requête
par exemple:
qui aurait dû être:
la source
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 passant un objet tableau JSON. La signature de la méthode de la page Web contenait un tableau d'un objet .NET fortement typé, OrderDetails. La propriété Actual_Qty a été 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 avoir supprimé 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.
la source
Essayez de définir la propriété du serveur du projet Web comme IIS local s'il s'agit d'IIS Express. Assurez-vous que l'URL du projet est correcte et créez un répertoire virtuel.
la source
Lorsqu'il s'agit d'URL (Uniform Resource Locator), il existe certaines normes de syntaxe , dans cette situation particulière, nous avons affaire à des caractères réservés .
Jusqu'à la 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 des caractères non réservés dans les URL ou vous pouvez essayer de les encoder.
Continue à creuser :
la source
%25
au lieu de%
, donc IIS peut renvoyer cette erreur pour une URL parfaitement valide.