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?
C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...
In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.
What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.
C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.
To solve the proble just get rid of the HttpUtility.UrlDecode(encodedString)
part.
The value that is coming to the action has been already decoded and you don't need to decode it second time.
In your example:
encodeURIComponent("djdh67-y&+dsdj") -> djdh67-y%26%2Bdsdj // sent
HttpUtility.UrlDecode("djdh67-y%26%2Bdsdj") -> djdh67-y&+dsdj // done
HttpUtility.UrlDecode("djdh67-y&+dsdj") -> djdh67-y& dsdj // wrong
Not encoded values in GET
can be incorrectly interpret by the browser. e.g. symbol &
in the request string means next parameter. That's why MVC "thinks" that every get parameter is encoded and decodes it.
In case when string is required in non-changed state it should be passed in the body of a POST
request.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With