一个典型web接口处理

</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 + ">");
        }


原文地址:https://www.cnblogs.com/foren/p/6009110.html