Класс Uri по умолчанию равен RFC 2396. Для OpenID и OAuth мне нужно экранировать Uri в соответствии с RFC 3986.
Из документации класса System.Uri :
По умолчанию все зарезервированные символы в URI экранируются в соответствии с RFC 2396. Это поведение изменяется, если включены международные идентификаторы ресурсов или анализ международного доменного имени, и в этом случае зарезервированные символы в URI экранируются в соответствии с RFC 3986 и RFC 3987.
В документации также говорится, что активация этого режима IRI и, следовательно, поведения RFC 3986 означает добавление элемента раздела uri в machine.config, а это в ваш файл app / web.config:
<configuration>
<uri>
<idn enabled="All" />
<iriParsing enabled="true" />
</uri>
</configuration>
Но независимо от того, присутствует ли это в файле .config или нет, я получаю такое же (не 3986) экранирующее поведение для приложения .NET 3.5 SP1. Что еще мне нужно сделать, чтобы Uri.EscapeDataString
использовал правила RFC 3986? (в частности, для экранирования зарезервированных символов, как определено в этом RFC)