Comment obtenir de l'Uri.EscapeDataString à respecter la RFC 3986
La classe Uri par défaut à la RFC 2396. Pour OpenID et OAuth, j'ai besoin d'échappement d'Uri conforme à la norme RFC 3986.
De la Système.Uri de documentation de classe:
Par défaut, tous les caractères réservés dans les URI sont échappés en conformité avec la RFC 2396. Ce comportement change si les Identificateurs de Ressources ou de Nom de Domaine International d'analyse est activé, auquel cas les caractères réservés dans les URI sont échappés en conformité avec la RFC 3986 et RFC 3987.
La documentation indique également que l'activation de cette IRI mode, et donc la RFC 3986 comportement moyen de l'ajout d'un uri élément de section à la machine.config et ce pour votre application web.fichier de configuration:
<configuration>
<uri>
<idn enabled="All" />
<iriParsing enabled="true" />
</uri>
</configuration>
Mais si cela est présent dans la .fichier de config ou pas, j'ai la même (non-3986) échapper comportement pour un .NET 3.5 SP1 app. De quoi dois-je faire pour obtenir Uri.EscapeDataString
l'utilisation de la RFC 3986 règles? (plus précisément, pour échapper les caractères réservés tels que définis dans la RFC)
- J'ai ajouté un peu de contenu de la communauté de l'erreur dans l'exemple de syntaxe.
- J'ai déposé ce, en interne comme un bug avec le .NET Framework (je travaille pour MSFT). Ils reconnaissent cela comme une documentation bug, car en effet ce paramètre de configuration n'est pas la classe Uri se comporter comme le RFC 3986 à l'égard de s'échapper.
Vous devez vous connecter pour publier un commentaire.
N'ayant pas été en mesure d'obtenir de l'Uri.EscapeDataString à prendre sur la RFC 3986 de comportement, j'ai écrit ma propre RFC 3986 conforme à échapper à la méthode. Il tire parti de l'Uri.EscapeDataString, puis "mises à jour" échapper à la RFC 3986 de la conformité.
Ce qui a été effectivement résolu dans .NET 4.5 de travail par défaut, voir ici.
Je viens de créer une nouvelle bibliothèque appelée Purifier (après l'exécution de cette question) qui va traiter se présente au travail pour .NETTE avant 4.5 (pour 3.5) et Mono par une variation de l'approche adoptée dans ce post. Purifier ne change pas EscapeDataString mais il ne vous laisser avoir Uri avec des caractères réservés qui ne seront pas échappé.
Je me rends compte de cette question et les réponses sont vieux de quelques années, mais j'ai pensé que je voudrais partager ma conclusion quand j'ai eu du mal à me la conformité en vertu de l' .Net 4.5.
Si votre code est en cours d'exécution en vertu de l'asp.net, il suffit de régler le projet a pour objectif de 4,5 et en cours d'exécution sur une machine avec 4.5 ou une version ultérieure, vous pouvez toujours obtenir 4.0 comportement. Vous devez vous assurer
<httpRuntime targetFramework="4.5" />
est situé dans le web.config.De cet article de blog sur msdn,
Quelle version du cadre utilisez-vous? Il semble que beaucoup de ces changements ont été faits dans l' (à partir de MSDN) ".NET Framework 3.5. 3.0 SP1, et 2.0 SP1" délai.
Je ne pouvais pas trouver une meilleure réponse (soit 100% cadre ou 100% des émules), j'ai donc créé cette abomination. Semble être de travailler avec OAuth.