HTTP啊!报头设置啊!获取实体啊!一个都没听过啊!网上有很多的 讲解就是没有具体用法,花了两个星期才做完。接下来就是我为大家总结的方法
一、获取Request实体XML数据
Stream sm = Context.Request.InputStream; 获取Request 实体数据
string xml = GetPostData(sm); //将xml数据转换为string类型的数据
string useragent =Context.Request.UserAgent.ToString(); //获取User-Agent里包含的数据
///为了方便数据的读取(用xml获取节点获取真的很麻烦)将string类型的xml数据转换为 DataSet
DataSet ds = GetDataSetByXml(xml);
注:ds.Tables[0].Columns[j].ToString(); //获取列头名;
ds.Tables[0].Rows[0][0].ToString(); //获取第0行0列的数据
这样的数据还不是任你拿捏!到这里还好说方法多下是,下边的几行代码真是愁死我了。
补充数据转换方法:
///
/// 将xml数据转换为string类型的数据
///
///
///
public static string GetPostData(System.IO.Stream sm)
{
int len = (int)sm.Length;
byte[] inputByts = new byte[len];
sm.Read(inputByts, 0, len);
sm.Close();
return Encoding.Default.GetString(inputByts);
}
///
/// 将xml的字符串数据转换为DataSet
///
/// xml字符串
///
public static DataSet GetDataSetByXml(string xmlData)
{
try
{
DataSet ds = new DataSet();
using (StringReader xmlSR = new StringReader(xmlData))
{
ds.ReadXml(xmlSR, XmlReadMode.InferTypedSchema); //忽视任何内联架构,从数据推断出强类型架构并加载数据。如果无法推断,则解释成字符串数据
if (ds.Tables.Count > 0)
{
return ds;
}
}
return null;
}
catch (Exception)
{
return null;
}
}
二、设置报头方法
设置Cache-Control单属性:Context.Response.CacheControl = "no-cache";
如上图设置Cache-Control多属性:
Context.Response.Cache.SetMaxAge(TimeSpan.Zero); //添加max-age=0;
string date = DateTime.Parse("Thu, 01 Jan 1970 00:00:00 GMT").ToString("yyyy-MM-dd HH:mm:ss");
Context.Response.Cache.SetExpires(Convert.ToDateTime(date)); //设置Expires:Thu, 01 Jan 1970 00:00:00 GMT
Context.Response.Cache.SetNoStore(); //添加no-store;
Context.Response.AddHeader("Pragma", "No-cache"); //添加Pragma:no-cache
Context.Response.AddHeader("Content-Type", "text/xml"); //添加Content-Type=text/xml;
三、设置WebService返回数据类型
默认返回类型为XML格式,会将返回的字符串放到
Context.Response.Charset = "UTF-8";
Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Context.Response.Write(data);
Context.Response.End();
//为了方便测试是否获取到了应用的请求信息,用了两个方法
///将string字符串放入文件夹
string fullPath ="D:/a.txt";
using (StreamWriter sw = new StreamWriter(fullPath, false, Encoding.Default))
{
sw.WriteLine(s[5]);
}
///将xml格式的string数据放进文件夹
string xml="2 1 0 ";
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml1);
xmldoc.Save("D:/data.xml");
----------------------------------------------------------分割线--------------------------------------------------------
修改:一、获取Request 实体数据
用InputStream直接获取HTTP输入流实体:Stream sm = Context.Request.InputStream; 有时数据会报获取xml时,出现“(十六进制值 0x1F)是无效的字符之类Xml异常。解决方法如下:
在上面代码下添加
StreamReader sr = new StreamReader(sm, System.Text.Encoding.UTF8);
string requestXml = sr.ReadToEnd();
这样获取实体时就会按照UTF8的编码来读取。自然string xml = GetPostData(sm);这行代码和GetPostData()方法也就不需要了!
至于Context.Request.Form这个方法还没有用到!如果,有什么想法欢迎交流!