decode querystring within context.Request
Asked Answered
A

3

7

i have an ashx file that requires some query-string values to deliver appropriate images.

The problem is some search engines urlencode then htmlencode those urls in their cache or when they index those.

So for example instead of getting

/preview.ashx?file=abcd.jpg&root=small

i get

/preview.ashx?file=abcd.jpg&root=small

this basically throws off the context.Request.QueryString["root"] so it thinks that there's no variable root

i guess the second key in the querystring is amp;root i.e the part after the & sign.

What i'm wondering is if there's a way to automatically html and urldecode the querystring on serverside so that the program doesn't get confused.

Astyanax answered 7/9, 2012 at 20:10 Comment(3)
You tagged the question with C - did you mean C#?Kebab
Shouldn't that be: context.Request.QueryString["root"] (the string root)Kebab
yes.. i meant c#... context.Request.QueryString["root"] should return small but it returns null because there's no such key as root.... there's a key amp;rootAstyanax
P
14

There is no harm in calling HttpUtility.HtmlDecode or HttpUtility.UrlDecode more than once.

string queryString = "/preview.ashx?file=abcd.jpg&root=small";
var parsedString = HttpUtility.HtmlDecode(queryString);
var root = HttpUtility.ParseQueryString(parsedString)["root"];
Positivism answered 7/9, 2012 at 20:17 Comment(3)
thanks... i actually was trying to avoid doing it that way... but i guess since there's no way to SET context.Request.QueryString after decoding it, that should work too. Was wondering if there was a way to decode it serverside so that i could leave the program out of itAstyanax
Actually, wouldn't it be a problem if you had an encoded + sign in your original URL and you called decode twice? The first time, it would be decoded to +, but the second time, + would be decoded as a space. Unless I'm missing something?Quadragesima
@rar How about posting an example using for ex HttpUtility.UrlEncode and HttpUtility.UrlDecode so that we can talk on a concrete sample code.Positivism
S
11

To URL encode and decode you can use the following methods:

string encoded = System.Web.HttpUtility.UrlEncode(url);

string decoded = System.Web.HttpUtility.UrlDecode(url);

I've seen instances in the past where the Query String has been doubly encoded. In which case you'll need to doubly decode — this may be your issue...

Sachs answered 7/9, 2012 at 20:13 Comment(0)
S
1

WebUtility.UrlDecode(countyName)

Latest in .net core 6

Sialkot answered 19/7, 2023 at 17:7 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.