zoukankan      html  css  js  c++  java
  • 一个典型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 + ">");
            }


  • 相关阅读:
    sosex !mk
    使用boost iostream写文件
    编译ios版本的ffmpeg0.11.1
    转换日期为中文数字
    sosex !muf查看方法的反汇编代码
    Xcode 4.5.2 + iOS 6.0免证书(iDP)开发+真机调试+生成IPA全攻略
    sosex查看变量的命令!mdt
    vs2012编译openssl
    为ios编译openssl
    打开的页面关闭后刷新主页面
  • 原文地址:https://www.cnblogs.com/foren/p/6009110.html
Copyright © 2011-2022 走看看