I have a C# Web Api end point in a controller that has a parameter. This parameter accepts an encrypted string and this string will contain characters like "/", "&", "+" etc. So whenever I call my Api endpoint from javascript, I encode it using encodeURIComponent
function. Since I am expecting an encoded string I used HttpUtility.UrlDecode
in my Web Api code, to decode and use it in my app.
public HttpActionResult MyAction(string encodedString)
{
string decodedString = HttpUtility.UrlDecode(encodedString);
// Process request
}
To check whether the code works as expected I started debugging by sending encoded strings as input. To my astonishment, I found that the input parameter already decodes on its own and pass it in the action method. This worked fine with the decoder method I have used, but started breaking when there was a "+" character. when I pass a string with "+" character the decoder method changed it to a blank space.
for e.g. passing djdh67-y&+dsdj
to decoder changed to djdh67-y& dsdj
There were two surprises for me. First, why did the parameter got decoded on it own and second, why did the "+" character got decoded to a blank space? I cannot use this code until I understand what is happening because there might be surprises later (maybe automatic decoding stops) which will not be good.
Can someone explain me what exactly is happening or what is the best way to solve this problem?