</pre><pre name="code" class="csharp"> protected void Page_Load(object sender, EventArgs e) { StringBuilder xmlStr = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"); xmlStr.Append("<ret>"); string result = GetResult(); xmlStr.Append(result); xmlStr.Append("</ret>"); Response.ContentType = "text/xml"; Response.Write(xmlStr.ToString()); Response.End(); } private string GetResult() { List<SqlParameter> ps = new List<SqlParameter>(); DateTime pDate = DateTime.Now; TimeSpan ts = new TimeSpan(0); int sitid = 0; string sitkey = ""; string errMsg = ""; DataSet ds = null; try { #region 参数验证 //站点编号验证 if (string.IsNullOrEmpty(Request["siteid"])) { return "<state>error</state><code>1001</code><message>缺少站点参数</message>"; } else { if (int.TryParse(Request["siteid"], out sitid)) { ps.Add(new SqlParameter("@sitid", sitid)); } else { return "<state>error</state><code>1002</code><message>站点参数格式错误</message>"; } } //时间戳验证 if (string.IsNullOrEmpty(Request["timestamp"])) { return "<state>error</state><code>1003</code><message>缺少时间参数</message>"; } else { if (DateTime.TryParse(Request["timestamp"], out pDate)) { ts = pDate.Subtract(DateTime.Now).Duration(); if (ts.Minutes > 2) { return "<state>error</state><code>1004</code><message>提交时间已过期</message>"; } } else { return "<state>error</state><code>1005</code><message>时间参数格式错误</message>"; } } //MD5验证 string sql = "select sitekey from websit where sitid=@sitid"; object obj = baseclass.GetSingle(sql, ps.ToArray()); if (obj == null || string.IsNullOrEmpty(obj.ToString())) { return "<state>error</state><code>1006</code><message>站点信息不存在</message>"; } else { sitkey = obj.ToString(); } string data = "siteid=" + sitid.ToString() + "×tamp=" + Request["timestamp"] + sitkey; if (Request["sign"] != Md5Encry.EncryptMd5(data)) { return "<state>error</state><code>1007</code><message>参数MD5验证失败</message>"; } #endregion #region 获取统计数据 if (ts.Minutes < 1) { object catchData = DataCache.GetCache("API_" + Request["siteid"]); if (catchData == null) { ds = GetData(ps); DataCache.RemoveCache("API_" + Request["siteid"]); DataCache.SetCache("API_" + Request["siteid"], ds, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 2, 0)); } else { ds = catchData as DataSet; } } else { ds = GetData(ps); DataCache.RemoveCache("API_" + Request["siteid"]); DataCache.SetCache("API_" + Request["siteid"], ds, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 2, 0)); } #endregion if (ds == null || (ds.Tables[0] == null && ds.Tables[1] == null && ds.Tables[2] == null && ds.Tables[3] == null) || (ds.Tables[0].Rows.Count < 1 && ds.Tables[1].Rows.Count < 1 && ds.Tables[2].Rows.Count < 1 && ds.Tables[3].Rows.Count < 1)) { return "<state>error</state><code>1008</code><message>没有找到所需数据</message>"; } } catch(Exception ex) { Log.WriteLog("API error:" + ex.Message); return "<state>error</state><code>1009</code><message>系统错误,请重试</message>"; } StringBuilder re = new StringBuilder("<state>ok</state><code>1000</code><data>"); re = setXML(re, "undisposed", ds.Tables[0]); re = setXML(re, "disposing", ds.Tables[1]); re = setXML(re, "questionably", ds.Tables[2]); re = setXML(re, "lost", ds.Tables[3]); re.Append("</data>"); return re.ToString(); } private DataSet GetData(List<SqlParameter> pList) { string sql = @"xxxx"; pList.Add(new SqlParameter("@now", DateTime.Now.ToString("yyyy-MM-dd" + " 00:00:00"))); return baseclass.Query(sql, pList.ToArray()); } private StringBuilder setXML(StringBuilder src, string type, DataTable dt) { src.Append("<" + type + ">"); src.Append("<total>"); string total = dt.Rows.Count > 0 ? dt.Rows[0]["total"].ToString() : "0"; src.Append(total); src.Append("</total>"); for (int i = 0; i < dt.Rows.Count; i++) { string tmp = i == 0 ? "first" : i == 1 ? "second" : i == 2 ? "three" : ""; src.Append("<" + tmp + ">"); src.Append("<goodsid>"); src.Append(dt.Rows[i]["supplyGoodsid"].ToString()); src.Append("</goodsid>"); src.Append("<goodsname>"); src.Append(dt.Rows[i]["supplyGoodsname"].ToString()); src.Append("</goodsname>"); src.Append("<count>"); src.Append(dt.Rows[i]["cnt"].ToString()); src.Append("</count>"); src.Append("</" + tmp + ">"); } return src.Append("</" + type + ">"); }