第一次写博客,简单说明以下原因。新手工作半年,用的是C# webservice请求,比较老的技术。有可能我的理解还不是很深,暂且这样认为把。目前做的项目都是请求别人接口,request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; 定义的传输报文体,当然还有其他类型的。但是怎么接收却没做过,网上百度也是没有明确的回答。下面举例子。
** 获得请求的json数据,注意不是json字符串。下面代码展示(包括header)
HttpResponse Response;
private void setEncoding()
{
Response = HttpContext.Current.Response;
WebClientSelf.setUTF8Encoding(Response);
}
[WebMethod(Description = "带header的提交json数据")]
public void get()
{
setEncoding();
string result = "";
string name = "{\"code\":\"hellow word!\"}";
byte[] quest = System.Text.Encoding.UTF8.GetBytes(name);
string url = "http://localhost:11263/webservice/common.asmx/A";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("uid", "admin");
request.Headers.Add("pwd", "admin888");
request.ContentLength = quest.Length;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(quest, 0, quest.Length);
reqStream.Close();
}
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
Response.Write(result);
Response.End();
}
接收方法:
[WebMethod(Description = "获取实体流")]
public string A()
{
Stream s = HttpContext.Current.Request.InputStream;//获得json 字符流,
string header = HttpContext.Current.Request.Headers["uid"];//获得header 下uid的值
//还原数据流
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
string jsontext=Encoding.UTF8.GetString(b);
return "header=" + header + "|" + "json=" + jsontext;
}