我有一個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