我有一个C#Web Api终端控制器中有一个参数。这个参数接受一个加密的字符串,这个字符串将包含像“/”,“&”,“+”等字符。所以每当我从javascript调用我的Api端点时,我使用encodeURIComponent
函数对它进行编码。由于我期待的编码字符串我在我的Web Api代码中使用HttpUtility.UrlDecode
,解码并在我的应用程序中使用它。C#Web Api操作方法自动解码查询参数
public HttpActionResult MyAction(string encodedString)
{
string decodedString = HttpUtility.UrlDecode(encodedString);
// Process request
}
要检查代码是否按预期工作,我开始通过发送编码字符串作为输入进行调试。令我惊讶的是,我发现输入参数已经自行解码并将其传递给action方法。这与我用过的解码器方法很好地工作,但有一个“+”字符时开始打破。当我传递一个带有“+”字符的字符串时,解码器方法将其更改为空格。
例如,通过djdh67-y&+dsdj
解码器更改为djdh67-y& dsdj
对我来说有两个惊喜。首先,为什么参数自己解码?第二,为什么“+”字符被解码为空格?在我明白发生了什么之前,我不能使用这段代码,因为稍后可能会出现意外(可能是自动解码停止),这将不太好。
有人可以解释我到底发生了什么,或者解决这个问题的最好方法是什么?
我知道删除解码方法将解决问题。我想知道编码的字符串是如何自动解码的。是否因为asp.net Web Api的一些内部功能?我们可以使用配置控制它吗?它会每次解码字符串100%吗? – nak
我想这不可能使用'GET'。因为'GET'参数应该被编码以便被浏览器正确处理。但在POST请求的情况下,它不会自动编码/解码。把你的查询改成'POST'并把数据放入** body **中,而不是解码。 – ASpirin