類似相關問題有以下: WCF- restful介面 POST方式調用報錯(遠程伺服器返回錯誤: 400 錯誤的請求) WCF Rest:不使用UriTemplate使用post方式傳參解決HTTP400問題以及參數映射問題 等等! 具體原因參照:原創:轉載請標明出處:http://www.cnblo ...
類似相關問題有以下:
WCF- restful介面 POST方式調用報錯(遠程伺服器返回錯誤: 400 錯誤的請求)
WCF Rest:不使用UriTemplate使用post方式傳參解決HTTP400問題以及參數映射問題
等等!
具體原因參照:原創:轉載請標明出處:http://www.cnblogs.com/sh91/p/3273072.html
標記自己遇到的問題原因,描述如下:
伺服器介面:
[WebInvoke(Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string GetExptrainhist(string strjson);//入參為string類型
客戶端調用:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://localhost:8734/GetExptrainhist");
request.ContentType = "application/json";
request.Method = "POST";
//======測試數據======start===============
ExpTrainHist_req t = new ExpTrainHist_req();
t.account = "exp";
t.fc = "expTrainHist_req";
t.starttime = "2017-04-17 13:00:00";
t.endtime = "2017-04-17 14:04:51";
string data = Newtonsoft.Json.JsonConvert.SerializeObject(t);
//string inputString = "c901411";
//======end===========
string inputString = data;
//string inputString = "{\"IdNumbr\":\"612523198308190014\",\"StuId\":\"901411\",\"SchCode\":\"1011099212\",\"TrainId\":\"3\",\"StartTime\":\"2017-04-17 00:00:01\",\"During\":\"3000\",\"ScoreHis\":\"10\"}";
Byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(inputString);
request.ContentLength = byteArray.Length;
Stream rstream = request.GetRequestStream();
rstream.Write(byteArray, 0, byteArray.Length);
rstream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//此處報錯:遠程伺服器返回錯誤: 400 錯誤的請求
Stream stream = response.GetResponseStream();
StreamReader SR = new StreamReader(stream);
String info = SR.ReadToEnd();
string temp = Newtonsoft.Json.JsonConvert.DeserializeObject(info).ToString();
SR.Dispose();
=====================
http://www.cnblogs.com/sh91/p/3273072.html博客的問題原因:
註意:JSON格式預設為“”引起,所以 "\"ss\""不能寫為“ss”,否則還是HTTP400錯誤。因為未識別數據,將數據拼接到其他位元組了吧。
自己的入參改為:
//首先將data的 json字元串的雙引號改成單引號,再加上雙引號傳到服務,問題解決。
inputString = "\"" + data.Replace("\"","\'") + "\""
Byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(inputString);
request.ContentLength = byteArray.Length;
Stream rstream = request.GetRequestStream();
rstream.Write(byteArray, 0, byteArray.Length);
rstream.Close();