2015-06-03 31 views
0

我有問題與身份驗證/授權發佈JSON ..以下是我的代碼..對手說,他們沒有收到標題...我不知道爲什麼...C#發佈JSON與身份驗證標題

ASCIIEncoding encoding = new ASCIIEncoding(); 
byte[] data = encoding.GetBytes(stringData); 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL); 
req.Method   = "POST"; 
req.ContentType = "application/json"; 
req.ContentLength = data.Length; 
req.Headers.Add("Authentication", merchantID); 
req.Headers["Authentication"] = merchantID; 

Stream newStream = req.GetRequestStream(); 
newStream.Write(data, 0, data.Length); 
newStream.Close(); 

HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
string returnString = response.StatusCode.ToString(); 

回答

0

我寫一些示例代碼附加頭,而你呼叫服務...... 希望它是要緊的......

ASCIIEncoding編碼=新ASCIIEncoding(); byte [] data = encoding.GetBytes(stringData);

 HttpWebRequest reqest = (HttpWebRequest)WebRequest.Create(serviceUri); 
     reqest.Headers.Add(LoginName,LoginName); 
     reqest.Headers.Add(AuthenticationKey,AuthenticationKey); 
     reqest.Headers.Add(SessionKey,SessionKey); 
     reqest.ContentType = "application/json"; 

    Stream newStream = req.GetRequestStream(); 
    newStream.Write(data, 0, data.Length); 
    newStream.Close(); 

    HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
    string returnString = response.StatusCode.ToString(); 
+0

'Add(LoginName,LoginName)','Add(AuthenticationKey,AuthenticationKey)'etc看起來不對。錯過枚舉名稱? –

+0

是的..第一個參數是這樣的枚舉名... –

+0

EnumCollection.ServiceRequestHeader.AuthenticationKey.ToString(), –

0

我不能確定地說出問題所在。它甚至可以在服務器端。 最近我從事了一個頭部驗證的項目,我注意到了一件有趣的事情。我的PHP服務器收到這些頭以'HTTP_'爲前綴。

換句話說,我是在要求如:

req.Headers.Add("Authentication", merchantID); 

並接受了它在服務器上這樣說:

echo $_SERVER['HTTP_Authentication']; 

我花了很多時間來找到它。 實際上,您可以詢問您的對手是否存在類似的標題,或者讓他更好地檢查您的請求並給予您反饋。可以使用WebClient。也許,這會有所幫助。
此外,它更方便。

string data = "{\"a\": \"b\"}"; 

WebClient client = new WebClient(); 

client.Headers.Add("Content-Type", "application/json"); 
client.Headers.Add("Authentication", merchantID); 

var result = client.UploadString(serverURL, "POST", data);