I have an MVC route like this www.example.com/Find?Key= with the Key being a Base64 string. The problem is that the Base64 string sometimes has a trailing equal sign (=) such as:
huhsdfjbsdf2394=
When that happens, for some reason my route doesn’t get hit anymore.
What should I do to resolve this?
My route:
routes.MapRoute(
"FindByKeyRoute",
"Find",
new { controller = "Search", action = "FindByKey" }
);
If I have http://www.example.com/Find?Key=bla then it works.
If I have http://www.example.com/Find?Key=bla= then it doesn’t work anymore.
Important Addition:
I’m writing against an IIS7 instance that doesn’t allow % or similar encoding. That’s why I didn’t use UrlEncode to begin with.
EDIT: Original suggestion which apparently doesn’t work
I’m sure the reason is that it thinks it’s a query parameter called Key. Could you make it a parameter, with that part being the value, e.g.
I expect that would work (as the parser would be looking for an
&to start the next parameter) but it’s possible it’ll confuse things still.Suggestion which I believe will work
Alternatively, replace “=” in the base64 encoded value with something else on the way out, and re-replace it on the way back in, if you see what I mean. Basically use a different base64 decodabet.
Alternative suggestion which should work
Before adding base64 to the URL:
Then before calling
Convert.FromBase64String()(which is what I assume you’re doing) on the inbound request: