【发布时间】:2018-02-25 13:35:24
【问题描述】:
我在具有参数的控制器中有一个 C# Web Api 端点。此参数接受加密字符串,此字符串将包含“/”、“&”、“+”等字符。因此,每当我从 javascript 调用我的 Api 端点时,我都会使用 encodeURIComponent 函数对其进行编码。因为我期待一个编码字符串,所以我在我的 Web Api 代码中使用了 HttpUtility.UrlDecode 来解码并在我的应用程序中使用它。
public HttpActionResult MyAction(string encodedString)
{
string decodedString = HttpUtility.UrlDecode(encodedString);
// Process request
}
为了检查代码是否按预期工作,我通过发送编码字符串作为输入开始调试。令我惊讶的是,我发现输入参数已经自行解码并在 action 方法中传递它。这适用于我使用的解码器方法,但是当有“+”字符时开始中断。当我传递带有“+”字符的字符串时,解码器方法将其更改为空格。
例如将djdh67-y&+dsdj 传递给解码器更改为djdh67-y& dsdj
对我来说有两个惊喜。首先,为什么参数自己被解码,其次,为什么“+”字符被解码为空白?在我了解正在发生的事情之前,我无法使用此代码,因为以后可能会出现意外(可能会自动解码停止),这将是不好的。
谁能解释一下到底发生了什么或者解决这个问题的最佳方法是什么?
【问题讨论】:
标签: c# url asp.net-web-api encoding decoding