WCF(远程服务器返回错误: 400 错误的请求)
2017-05-25 15:29
204 查看
类似相关问题有以下:
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();
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();
相关文章推荐
- SharePoint 2013 远程服务器返回错误: (400) 错误的请求。 不支持查询字符串中的 api-version
- httppost 远程服务器返回错误: (400) 错误的请求错误
- SharePoint 2013 Workflow Manager 1.0 远程服务器返回错误: (400) 错误的请求。 不支持查询字符串中的 api-version
- WebException远程服务器返回错误: (400) 错误的请求。
- Silverlight 调用WCF 远程服务器返回了错误: NotFound
- WCF 远程服务器返回了错误: NotFound
- SilverLight调用WCF”远程服务器返回了错误: NotFound”的排解
- VS2010 WCF 远程服务器返回了意外响应: (400) Bad Request等问题解决方案
- Silverlight连接WCF--错误"远程服务器返回了错误NotFound”
- WCF中远程服务器返回了一个错误: NotFound. 错误的解决思路
- Silverlight 调用WCF 远程服务器返回了错误: NotFound
- WCF 远程服务器返回了意外响应: (400) Bad Request。
- wcf 远程服务器返回了错误 NotFound原因之一
- WCF错误远程服务器返回了意外响应: (413) Request Entity Too Large。解决方案
- SilverLight调用WCF”远程服务器返回了错误: NotFound”的排解
- 在Tomcat服务器下,java使用HttpClient发请求返回400错误
- 远程服务器返回了错误: NotFound。 WCF
- C#客户端上传错误:远程服务器返回错误
- HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。
- 原创:远程服务器返回错误: (500) 内部服务器错误