using CallCenter.Utility.Common; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; namespace CallCenter.Utility { public class RequestHandler { public RequestHandler(HttpContext httpContext) { Parameters = new Hashtable(); this.HttpContext = httpContext ?? HttpContext.Current; } /// /// 密钥 /// private string Key; protected HttpContext HttpContext; /// /// 请求的参数 /// protected Hashtable Parameters; /// /// debug信息 /// private string DebugInfo; /// /// 初始化函数 /// public virtual void Init() { } /// /// 获取debug信息 /// /// public String GetDebugInfo() { return DebugInfo; } /// /// 获取密钥 /// /// public string GetKey() { return Key; } /// /// 设置密钥 /// /// public void SetKey(string key) { this.Key = key; } /// /// 设置参数值 /// /// /// public void SetParameter(string parameter, string parameterValue) { if (parameter != null && parameter != "") { if (Parameters.Contains(parameter)) { Parameters.Remove(parameter); } Parameters.Add(parameter, parameterValue); } } /// /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// /// 参数名 /// 参数值 /// key和value通常用于填充最后一组参数 /// public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = CommonHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return sign; } /// /// 输出XML /// /// public string ParseXML() { StringBuilder sb = new StringBuilder(); sb.Append(""); foreach (string k in Parameters.Keys) { string v = (string)Parameters[k]; if (Regex.IsMatch(v, @"^[0-9.]$")) { sb.Append("<" + k + ">" + v + ""); } else { sb.Append("<" + k + ">"); } } sb.Append(""); return sb.ToString(); } /// /// 设置debug信息 /// /// public void SetDebugInfo(String debugInfo) { this.DebugInfo = debugInfo; } public Hashtable GetAllParameters() { return this.Parameters; } protected virtual string GetCharset() { return this.HttpContext.Request.ContentEncoding.BodyName; } } }