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.