专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Web Service

用REST方式访问wcf服务,post时老报“远程服务器返回异常: (400) 异常的请求”

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
用REST方式访问wcf服务,post时老报“远程服务器返回错误: (400) 错误的请求”
先贴代码

string id = "12qwsfsfasfsaf";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xxx/GetProduct.svc/GetStudentById");

            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            request.Method = "POST";

            request.ContentType = "application/json";
            request.Accept = "application/json";

            request.ContentLength = Encoding.UTF8.GetByteCount(id);

            Stream myRequestStream = request.GetRequestStream();

            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));

            myStreamWriter.Write(id);

            myStreamWriter.Close();

            //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
            } 
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string jsonstr = sr.ReadToEnd();


奇葩的是只要参数是以数字开头的就不会报错,反之就报错,有谁遇到过这个问题没?
------解决思路----------------------
 request.ContentLength = Encoding.UTF8.GetByteCount(id);
             Stream myRequestStream = request.GetRequestStream();
             StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));

你计算长度的时候用UTF8,而实际写入时用gb2312,可能会造成问题。

改成这样试一试


byte[] bytes = Encoding.UTF8.GetBytes(id);
//如果想用gb2312就使用
// byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(id);
 request.ContentLength = bytes.Length;
Stream myRequestStream = request.GetRequestStream();
myStreamWriter.Write(bytes, 0, bytes.Length);
myStreamWriter.Close();
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: