I have a parameter which I am passing as querystring to the page URL.Before passing the value as querystring I am encrypting the value. However the encrypted value sometimes contains the + in the querystring. I know it has special meaning in the URL. So I used Server.UrlEncode(encryptedvalue) to make it safe. But however when I get the Querystring only the + is getting evaluated before decoding the URL.
Here is code to Generate the query-string,
var result = Server.UrlEncode(this.UserSecurity.Encrypt<string>(value));
after this value of querystring(result) is + becomes %2b as expected
querystringvalue = "R3oQCPn%2bNVV4P0aL0LAZEL6Og1%2bQ2vOJJDJCSTY6WXE%3d"
I have No control over Encryption method so I can not change in there.
So when I access at the redirected page I get,
1) When I don't use UrlDecode then + becomes
querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
2) When I use the UrlDecode then still + becomes
querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
3) When I see in watch window here is strange thing I see,

As you can see there is + present in querystring but it getting resolved to .
So my question is,
1) Why the %3d not resolved to the = but the %2b resolved to + ?
2) And what Can I do to resolve this issue ? Because the %2b resolving to + and then to giving me wrong decrypted value and some times format exception.
UPDATE
After generating the result I am directly attaching it to the URL without any further process as "page.aspx?taskid="+result
resultbefore the next request?+instead ofUrlEncode.UrlTokenEncodementioned in the answer looks like it does exactly that.