J'ai un point d'extrémité C# Web Api dans un contrôleur qui a un paramètre. Ce paramètre accepte une chaîne cryptée et cette chaîne contiendra des caractères comme "/", "&", "+" etc. Donc, chaque fois que j'appelle mon point de terminaison Api de javascript, je l'encoder en utilisant la fonction encodeURIComponent
. Comme j'attends une chaîne encodée, j'ai utilisé HttpUtility.UrlDecode
dans mon code Web Api, pour le décoder et l'utiliser dans mon application. Pour vérifier si le code fonctionne comme prévu, j'ai commencé le débogage en envoyant des chaînes codées en entrée. À mon grand étonnement, j'ai trouvé que le paramètre d'entrée décodait déjà par lui-même et le transmettait dans la méthode d'action. Cela a bien fonctionné avec la méthode de décodeur que j'ai utilisée, mais j'ai commencé à casser quand il y avait un caractère "+". quand je passe une chaîne avec le caractère "+" la méthode du décodeur l'a changé en un espace vide.Méthode d'action C# Web Api décodant automatiquement le paramètre de requête
par exemple. passant djdh67-y&+dsdj
au décodeur a changé pour djdh67-y& dsdj
Il y avait deux surprises pour moi. Premièrement, pourquoi le paramètre a-t-il été décodé par lui-même et, ensuite, pourquoi le caractère "+" a-t-il été décodé dans un espace vide? Je ne peux pas utiliser ce code jusqu'à ce que je comprenne ce qui se passe parce qu'il pourrait y avoir des surprises plus tard (peut-être que le décodage automatique s'arrête) ce qui ne sera pas bon. Est-ce que quelqu'un peut m'expliquer ce qui se passe exactement ou quelle est la meilleure façon de résoudre ce problème?
Je sais que le retrait de la méthode de décodage résoudra le problème. Je veux savoir comment la chaîne encodée a été décodée automatiquement. Est-ce à cause de certaines fonctionnalités internes d'asp.net Web Api? Pouvons-nous avoir le contrôle en utilisant la config? Va-t-il décoder la chaîne à 100% à chaque fois? – nak
Je suppose que ce n'est pas possible en utilisant 'GET'. Parce que les paramètres 'GET' devraient être encodés pour être correctement traités par le navigateur. Mais il n'est pas automatiquement encodé/décodé en cas de requête POST. Changez votre requête en 'POST' et placez les données dans ** body ** plutôt que de les décoder. – ASpirin