In the end, I was indeed affected by the RFC 3986 issue.
It turns out the difference is a "quirks" mode of .Net 4.5. When running in an asp.net application, unless explicitly set, .Net will attempt to maintain application compatibility with previous versions.
I stepped into framework code and found a quirk setting in UriParser. Googling led me to this article about the <httpruntime>
element in web.config. Near the end, it says:
"If there is no <httpRuntime targetFramework>
attribute present in
Web.config, we assume that the application wanted 4.0 quirks
behavior."
Once I added targetFramework="4.5"
to my web.config, Uri.EscapeDataString behaved as I expected.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…