nak*_*nak 3 c# url encoding decoding asp.net-web-api
我在具有参数的控制器中具有C#Web Api端点。此参数接受加密的字符串,并且此字符串将包含“ /”,“&”,“ +”等字符。因此,每当我从javascript调用Api端点时,都会使用encodeURIComponent函数对其进行编码。由于我期望HttpUtility.UrlDecode在Web Api代码中使用编码字符串,以便在我的应用程序中对其进行解码和使用。
public HttpActionResult MyAction(string encodedString)
{
string decodedString = HttpUtility.UrlDecode(encodedString);
// Process request
}
Run Code Online (Sandbox Code Playgroud)
为了检查代码是否按预期工作,我通过发送编码字符串作为输入开始调试。令我惊讶的是,我发现输入参数已经自行解码并通过action方法传递了。这可以与我使用的解码器方法配合使用,但是在出现“ +”字符时开始中断。当我传递带有“ +”字符的字符串时,解码器方法将其更改为空格。
例如传递djdh67-y&+dsdj给解码器更改为djdh67-y& dsdj
我有两个惊喜。首先,为什么参数本身被解码,其次,为什么“ +”字符被解码为空白?在我了解发生了什么之前,我无法使用此代码,因为稍后可能会出现意外情况(也许自动解码停止),这将是不好的。
有人可以向我解释到底发生了什么或解决此问题的最佳方法是什么?
要解决问题,只需要摆脱掉这一HttpUtility.UrlDecode(encodedString)部分。
即将执行的操作的值已被解码,您无需第二次对其进行解码。
在您的示例中:
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
Run Code Online (Sandbox Code Playgroud)
GET浏览器可能会错误解释其中未编码的值。例如&,请求字符串中的符号表示下一个参数。这就是为什么MVC“认为”每个get参数都经过编码和解码的原因。
如果在不变状态下需要字符串,则应在POST请求正文中传递它。
| 归档时间: |
|
| 查看次数: |
4987 次 |
| 最近记录: |