ApiExtends.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. using MiniWebApi.Network;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Web;
  8. using Vinno.IUS.Common.Log;
  9. namespace Vinno.vCloud.Disk
  10. {
  11. public static class ApiExtends
  12. {
  13. private static ViewEngine viewEngine = new ViewEngine();
  14. /// <summary>
  15. /// 验证是否为空,空返回true
  16. /// </summary>
  17. /// <param name="context"></param>
  18. /// <param name="param"></param>
  19. /// <param name="paramName"></param>
  20. /// <param name="contentType"></param>
  21. /// <param name="pageName"></param>
  22. /// <returns></returns>
  23. public static bool VerificationIsEmpty(this WebApiHttpContext context, string param, string paramName, string contentType = "html", string pageName = "PageError.html")
  24. {
  25. bool verificationResult = false;
  26. var errorMsg = string.Format("Param {0} is empty", paramName);
  27. if (string.IsNullOrWhiteSpace(param))
  28. {
  29. context.PageResponse(contentType, pageName, new { ErrorMsg = errorMsg });
  30. verificationResult = true;
  31. }
  32. return verificationResult;
  33. }
  34. /// <summary>
  35. /// 验证是否包含特殊字符,包含返回true
  36. /// </summary>
  37. /// <param name="context"></param>
  38. /// <param name="param"></param>
  39. /// <param name="paramName"></param>
  40. /// <param name="contentType"></param>
  41. /// <param name="pageName"></param>
  42. /// <returns></returns>
  43. public static bool VerificationSpecialChar(this WebApiHttpContext context, string param, string paramName, string contentType = "html", string pageName = "PageError.html")
  44. {
  45. bool verificationResult = false;
  46. var errorMsg = string.Format("Param {0} are not allowed to have special characters", paramName);
  47. if (Regex.IsMatch(param, "[^0-9a-zA-Z]+"))
  48. {
  49. context.PageResponse(contentType, pageName, new { ErrorMsg = errorMsg });
  50. verificationResult = true;
  51. }
  52. return verificationResult;
  53. }
  54. /// <summary>
  55. /// 验证是否小于0 ,小于0返回true;
  56. /// </summary>
  57. /// <param name="context"></param>
  58. /// <param name="param"></param>
  59. /// <param name="paramName"></param>
  60. /// <param name="contentType"></param>
  61. /// <param name="pageName"></param>
  62. /// <returns></returns>
  63. public static bool VerificationLessThanZero(this WebApiHttpContext context, string param, string paramName, string contentType = "html", string pageName = "PageError.html")
  64. {
  65. bool verificationResult = false;
  66. var errorMsg = string.Format("Param {0} must greater than zero", paramName);
  67. double doubleTotalAmount;
  68. double.TryParse(param, out doubleTotalAmount);
  69. if (doubleTotalAmount <= 0)
  70. {
  71. context.PageResponse(contentType, pageName, new { ErrorMsg = errorMsg });
  72. verificationResult = true;
  73. }
  74. return verificationResult;
  75. }
  76. /// <summary>
  77. /// 写入响应数据
  78. /// </summary>
  79. /// <param name="context"></param>
  80. /// <param name="contentType"></param>
  81. /// <param name="pageName"></param>
  82. /// <param name="model"></param>
  83. /// <returns></returns>
  84. public static void PageResponse(this WebApiHttpContext context, string contentType, string pageName, object model)
  85. {
  86. switch (contentType)
  87. {
  88. case "html":
  89. string html = Encoding.UTF8.GetString(viewEngine.GetSource(pageName, contentType, model).ToArray());
  90. context.Response.ContentType = "text/html";
  91. context.Response.Write(Encoding.UTF8.GetBytes(html));
  92. break;
  93. case "json":
  94. context.Response.Json(model);
  95. break;
  96. }
  97. }
  98. /// <summary>
  99. /// 获取Get参数
  100. /// </summary>
  101. /// <param name="context"></param>
  102. /// <param name="keyName"></param>
  103. /// <param name="defaultValue"></param>
  104. /// <returns></returns>
  105. public static string GetParam(this WebApiHttpContext context, string keyName, string defaultValue = "")
  106. {
  107. var param = context.Request.QueryString.Get(keyName).XssEncode();
  108. return !string.IsNullOrWhiteSpace(param) ? param : defaultValue;
  109. }
  110. /// <summary>
  111. /// 获取Post参数
  112. /// </summary>
  113. /// <param name="context"></param>
  114. /// <returns></returns>
  115. public static Dictionary<string, object> GetParams(this WebApiHttpContext context)
  116. {
  117. try
  118. {
  119. var postContent = context.Request.GetInputStreamValue();
  120. Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
  121. var uriParams = postContent;
  122. if (uriParams != null)
  123. {
  124. var paramsArr = uriParams.Split('&');
  125. foreach (string param in paramsArr)
  126. {
  127. var keyValue = param.Split('=');
  128. var key = HttpUtility.UrlDecode(keyValue[0]).Replace("[]", "");
  129. var value = keyValue.Length > 1 ? HttpUtility.UrlDecode(keyValue[1]) : string.Empty;
  130. if (keyValuePairs.Keys.Contains(key))
  131. {
  132. if (keyValuePairs[key] is List<string> pairs)
  133. {
  134. pairs.Add(value);
  135. }
  136. else
  137. {
  138. List<string> newPairs = new List<string>();
  139. var convertValue = keyValuePairs[key] as string;
  140. newPairs.Add(convertValue);
  141. newPairs.Add(value);
  142. keyValuePairs[key] = newPairs;
  143. }
  144. }
  145. else
  146. {
  147. keyValuePairs.Add(key, value);
  148. }
  149. }
  150. }
  151. return keyValuePairs;
  152. }
  153. catch (Exception ex)
  154. {
  155. Logger.WriteLineError("GetParams error:" + ex.Message + "|" + ex.StackTrace);
  156. return new Dictionary<string, object>();
  157. }
  158. }
  159. /// <summary>
  160. /// 获取Dictionary参数
  161. /// </summary>
  162. /// <param name="keyValuePairs"></param>
  163. /// <param name="keyName"></param>
  164. /// <param name="defaultValue"></param>
  165. /// <returns></returns>
  166. public static string GetStringValue(this Dictionary<string, object> keyValuePairs, string keyName, string defaultValue = "")
  167. {
  168. return GetValue(keyValuePairs, keyName, defaultValue);
  169. }
  170. /// <summary>
  171. /// 获取Dictionary参数
  172. /// </summary>
  173. /// <param name="keyValuePairs"></param>
  174. /// <param name="keyName"></param>
  175. /// <param name="defaultValue"></param>
  176. /// <returns></returns>
  177. public static List<string> GetArrayValue(this Dictionary<string, object> keyValuePairs, string keyName)
  178. {
  179. return GetArrayValueData(keyValuePairs, keyName);
  180. }
  181. /// <summary>
  182. /// 获取Dictionary参数
  183. /// </summary>
  184. /// <param name="keyValuePairs"></param>
  185. /// <param name="keyName"></param>
  186. /// <param name="defaultValue"></param>
  187. /// <returns></returns>
  188. private static List<string> GetArrayValueData(Dictionary<string, object> keyValuePairs, string keyName)
  189. {
  190. var list = GetValue(keyValuePairs, keyName, new List<string>());
  191. if (list == null || list.Count == 0)
  192. {
  193. var onlyValue = GetValue(keyValuePairs, keyName, string.Empty);
  194. if (!onlyValue.IsEmpty())
  195. {
  196. list = new List<string> { onlyValue };
  197. }
  198. }
  199. return list;
  200. }
  201. /// <summary>
  202. /// 获取Dictionary参数
  203. /// </summary>
  204. /// <param name="keyValuePairs"></param>
  205. /// <param name="keyName"></param>
  206. /// <param name="defaultValue"></param>
  207. /// <returns></returns>
  208. public static T GetValue<T>(this Dictionary<string, object> keyValuePairs, string keyName, T defaultValue = null) where T : class
  209. {
  210. T paramValue = defaultValue ?? default(T);
  211. try
  212. {
  213. paramValue = (keyValuePairs[keyName] as T);
  214. if (paramValue == null)
  215. {
  216. paramValue = defaultValue;
  217. }
  218. }
  219. catch(Exception ex)
  220. {
  221. Logger.WriteLineError("GetValue error:" + ex.Message + "|" + ex.StackTrace);
  222. }
  223. return paramValue;
  224. }
  225. /// <summary>
  226. /// 获取SortedDictionary参数
  227. /// </summary>
  228. /// <param name="keyValuePairs"></param>
  229. /// <param name="keyName"></param>
  230. /// <param name="defaultValue"></param>
  231. /// <returns></returns>
  232. public static string GetValue(this SortedDictionary<string, object> keyValuePairs, string keyName, string defaultValue = "")
  233. {
  234. string paramValue = defaultValue;
  235. try
  236. {
  237. paramValue = keyValuePairs[keyName].ToStringEx().XssEncode();
  238. if (string.IsNullOrWhiteSpace(paramValue))
  239. {
  240. paramValue = defaultValue;
  241. }
  242. }
  243. catch (Exception ex)
  244. {
  245. Logger.WriteLineError("GetValue error:" + ex.Message + "|" + ex.StackTrace);
  246. }
  247. return paramValue;
  248. }
  249. /// <summary>
  250. /// ToString扩展函数
  251. /// </summary>
  252. /// <typeparam name="T"></typeparam>
  253. /// <param name="obj"></param>
  254. /// <param name="defaultValue"></param>
  255. /// <returns></returns>
  256. public static string ToStringEx<T>(this T obj, string defaultValue = "")
  257. {
  258. if (obj == null)
  259. {
  260. return defaultValue;
  261. }
  262. return obj.ToString();
  263. }
  264. }
  265. }