2015-10-01 38 views
0

我有一個客戶端連接到Asp.net Webapi2,使用身份& OAuth2進行身份驗證。
在認證過程中,每當密碼字段包含「+」 character.The服務器只是忽略這個字!(和大多數其他登錄提到了以下測試個字符)'+'字符從POST數據使用c#忽略webapi2

string data = "grant_type=password&username=" + username + "&password=" + password; 
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data); 
data.PostToUrl();//This Is just pseudoCode 

在服務器調試:
發數據:密碼=測試+ 1
接收數據:密碼=測試1
test2的
發送的數據: 「+ _)(& ^%$#@〜!」
接收數據:」 _)(

謝謝。

+0

你必須把它編碼爲「%2B」的任何項目編輯:上手機idk如何在這裏註釋代碼的正確格式,因爲我不能這樣做字符,所以忽略' – Bauss

+0

不只是在這種情況下,編碼參數(張貼在請求正文或通過查詢字符串發送)是很好的。 – niksofteng

+0

由於查詢字符串可能以日誌文件結尾,因此您可能會考慮將用戶名和密碼移至發佈數據,以保證其安全。這也將解決你的編碼問題。 –

回答

2

問題是什麼?使用HTTP URL +相當於一個空格。實際上%20也可以使用。

在查詢中發送數據時,始終使用UrlEncode;在

var q = string.Format("grant_type=password&username={0}&password={1}", 
    HttpUtility.UrlEncode(username), 
    HttpUtility.UrlEncode(password)); 
+0

我使用POST,爲什麼我應該關心HTTP URL? – Hamed

+0

你還沒有顯示POST代碼。但我懷疑'Content-Type'是'application-x-www-form-urlencoded',所以你必須遵守規則。 –

+0

是的,謝謝,我知道了。 – Hamed

2

HttpServerUtility.UrlEncode

這將有助於解決特殊字符等問題+ ANAD#

要使用它,你需要添加的System.Web參考(Project Explorer中>參考>添加引用>的System.Web)

一旦你這樣做,你可以用它來編碼你希望