人民医院API

RequestString.cs 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. using RMYY_CallCenter_Api.Utility.Helper;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Threading.Tasks;
  11. using System.Web;
  12. namespace RMYY_CallCenter_Api.Utility
  13. {
  14. /// <summary>
  15. /// 页面获取数据类
  16. /// </summary>
  17. public class RequestString
  18. {
  19. /// <summary>
  20. /// 判断当前页面是否接收到了Post请求
  21. /// </summary>
  22. /// <returns>是否接收到了Post请求</returns>
  23. public static bool IsPost()
  24. {
  25. return HttpContext.Current.Request.HttpMethod.Equals("POST");
  26. }
  27. /// <summary>
  28. /// 判断当前页面是否接收到了Get请求
  29. /// </summary>
  30. /// <returns>是否接收到了Get请求</returns>
  31. public static bool IsGet()
  32. {
  33. return HttpContext.Current.Request.HttpMethod.Equals("GET");
  34. }
  35. /// <summary>
  36. /// 返回URL中结尾的文件名
  37. /// </summary>
  38. public static string GetFilename(string url)
  39. {
  40. if (url == null)
  41. {
  42. return "";
  43. }
  44. string[] strs1 = url.Split(new[] { '/' });
  45. return strs1[strs1.Length - 1].Split(new[] { '?' })[0];
  46. }
  47. /// <summary>
  48. /// 返回指定的服务器变量信息
  49. /// </summary>
  50. /// <param name="strName">服务器变量名</param>
  51. /// <returns>服务器变量信息</returns>
  52. public static string GetServerString(string strName)
  53. {
  54. if (HttpContext.Current.Request.ServerVariables[strName] == null)
  55. return "";
  56. return HttpContext.Current.Request.ServerVariables[strName];
  57. }
  58. /// <summary>
  59. /// 返回上一个页面的地址
  60. /// </summary>
  61. /// <returns>上一个页面的地址</returns>
  62. public static string GetUrlReferrer()
  63. {
  64. string retVal = null;
  65. try
  66. {
  67. if (HttpContext.Current.Request.UrlReferrer != null)
  68. retVal = HttpContext.Current.Request.UrlReferrer.ToString();
  69. }
  70. catch (Exception)
  71. { }
  72. if (retVal == null)
  73. return "";
  74. return retVal;
  75. }
  76. /// <summary>
  77. /// 得到当前完整主机头
  78. /// </summary>
  79. /// <returns></returns>
  80. public static string GetCurrentFullHost()
  81. {
  82. HttpRequest request = HttpContext.Current.Request;
  83. if (!request.Url.IsDefaultPort)
  84. return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString(CultureInfo.InvariantCulture));
  85. return request.Url.Host;
  86. }
  87. /// <summary>
  88. /// 得到主机头
  89. /// </summary>
  90. /// <returns></returns>
  91. public static string GetHost()
  92. {
  93. return HttpContext.Current.Request.Url.Host;
  94. }
  95. /// <summary>
  96. /// 得到主机名
  97. /// </summary>
  98. public static string GetDnsSafeHost()
  99. {
  100. return HttpContext.Current.Request.Url.DnsSafeHost;
  101. }
  102. /// <summary>
  103. /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
  104. /// </summary>
  105. /// <returns>原始 URL</returns>
  106. public static string GetRawUrl()
  107. {
  108. return HttpContext.Current.Request.RawUrl;
  109. }
  110. /// <summary>
  111. /// 判断当前访问是否来自浏览器软件
  112. /// </summary>
  113. /// <returns>当前访问是否来自浏览器软件</returns>
  114. public static bool IsBrowserGet()
  115. {
  116. string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" };
  117. string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
  118. return BrowserName.Any(t => curBrowser.IndexOf(t, StringComparison.Ordinal) >= 0);
  119. }
  120. /// <summary>
  121. /// 判断是否来自搜索引擎链接
  122. /// </summary>
  123. /// <returns>是否来自搜索引擎链接</returns>
  124. public static bool IsSearchEnginesGet()
  125. {
  126. if (HttpContext.Current.Request.UrlReferrer == null)
  127. return false;
  128. string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
  129. string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
  130. return SearchEngine.Any(t => tmpReferrer.IndexOf(t, StringComparison.Ordinal) >= 0);
  131. }
  132. /// <summary>
  133. /// 获得当前完整Url地址
  134. /// </summary>
  135. /// <returns>当前完整Url地址</returns>
  136. public static string GetUrl()
  137. {
  138. return HttpContext.Current.Request.Url.ToString();
  139. }
  140. /// <summary>
  141. /// 获取文件
  142. /// </summary>
  143. /// <param name="strName"></param>
  144. /// <returns></returns>
  145. public static HttpPostedFile GetFile(string strName)
  146. {
  147. return HttpContext.Current.Request.Files[strName];
  148. }
  149. /// <summary>
  150. /// 获取文件
  151. /// </summary>
  152. /// <returns></returns>
  153. public static HttpFileCollection GetFiles()
  154. {
  155. return HttpContext.Current.Request.Files;
  156. }
  157. /// <summary>
  158. /// 获取stream
  159. /// </summary>
  160. /// <returns></returns>
  161. public static Stream GetInputStream()
  162. {
  163. return HttpContext.Current.Request.InputStream;
  164. }
  165. /// <summary>
  166. /// 获得指定Url参数的值
  167. /// </summary>
  168. /// <param name="strName">Url参数</param>
  169. /// <returns>Url参数的值</returns>
  170. public static string GetQueryString(string strName)
  171. {
  172. return GetQueryString(strName, false);
  173. }
  174. /// <summary>
  175. /// 获得指定Url参数的值
  176. /// </summary>
  177. /// <param name="strName">Url参数</param>
  178. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  179. /// <returns>Url参数的值</returns>
  180. public static string GetQueryString(string strName, bool sqlSafeCheck)
  181. {
  182. if (HttpContext.Current.Request.QueryString[strName] == null)
  183. return "";
  184. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName]))
  185. return "";
  186. return HttpContext.Current.Request.QueryString[strName];
  187. }
  188. /// <summary>
  189. /// 获得指定Url参数的值
  190. /// </summary>
  191. /// <param name="strName">Url参数</param>
  192. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  193. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  194. /// <returns>Url参数的值</returns>
  195. public static string GetQueryString(string strName, bool sqlSafeCheck, string defValue)
  196. {
  197. if (HttpContext.Current.Request.QueryString[strName] == null)
  198. return defValue;
  199. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName]))
  200. return defValue;
  201. return HttpContext.Current.Request.QueryString[strName];
  202. }
  203. /// <summary>
  204. /// SQL危险字符过滤
  205. /// </summary>
  206. /// <param name="source">要过滤的字符串</param>
  207. /// <param name="SafeLevel">安全级别{1最高}</param>
  208. /// <returns></returns>
  209. public static string FilterSql(string source, int SafeLevel)
  210. {
  211. //单引号替换成两个单引号
  212. source = source.Replace("'", "''");
  213. source = source.Replace("--", "--");
  214. if (SafeLevel == 1)
  215. {
  216. //单引号替换成两个单引号
  217. source = source.Replace("\"", "“");
  218. source = source.Replace("|", "|");
  219. //半角封号替换为全角封号,防止多语句执行
  220. source = source.Replace(";", ";");
  221. source = source.Replace("=", "=");
  222. //半角括号替换为全角括号
  223. source = source.Replace("(", "(");
  224. source = source.Replace(")", ")");
  225. }
  226. return source;
  227. }
  228. /// <summary>
  229. /// 检测是否有Sql危险字符
  230. /// </summary>
  231. /// <param name="str">要判断字符串</param>
  232. /// <returns>判断结果</returns>
  233. public static bool IsSafeSqlString(string str)
  234. {
  235. return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
  236. }
  237. /// <summary>
  238. /// 检测是否有危险的可能用于链接的字符串
  239. /// </summary>
  240. /// <param name="str">要判断字符串</param>
  241. /// <returns>判断结果</returns>
  242. public static bool IsSafeUserInfoString(string str)
  243. {
  244. return !Regex.IsMatch(str, @"^\s*$|^c:\\con\\con$|[%,\*" + "\"" + @"\s\t\<\>\&]|游客|^Guest");
  245. }
  246. /// <summary>
  247. /// 获得当前页面的名称
  248. /// </summary>
  249. /// <returns>当前页面的名称</returns>
  250. public static string GetPageName()
  251. {
  252. string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
  253. return urlArr[urlArr.Length - 1].ToLower();
  254. }
  255. /// <summary>
  256. /// 返回表单或Url参数的总个数
  257. /// </summary>
  258. /// <returns></returns>
  259. public static int GetParamCount()
  260. {
  261. return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count;
  262. }
  263. /// <summary>
  264. /// 获得指定表单参数的值
  265. /// </summary>
  266. /// <param name="strName">表单参数</param>
  267. /// <returns>表单参数的值</returns>
  268. public static string GetFormString(string strName)
  269. {
  270. return GetFormString(strName, false);
  271. }
  272. /// <summary>
  273. /// 获得指定表单参数的值
  274. /// </summary>
  275. /// <param name="strName">表单参数</param>
  276. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  277. /// <returns>表单参数的值</returns>
  278. public static string GetFormString(string strName, bool sqlSafeCheck)
  279. {
  280. if (HttpContext.Current.Request.Form[strName] == null)
  281. return "";
  282. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName]))
  283. return "";
  284. return HttpContext.Current.Request.Form[strName];
  285. }
  286. /// <summary>
  287. /// 获得指定表单参数的值
  288. /// </summary>
  289. /// <param name="strName">表单参数</param>
  290. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  291. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  292. /// <returns>表单参数的值</returns>
  293. public static string GetFormString(string strName, bool sqlSafeCheck, string defValue)
  294. {
  295. if (HttpContext.Current.Request.Form[strName] == null)
  296. return defValue;
  297. if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.Form[strName]))
  298. return defValue;
  299. return HttpContext.Current.Request.Form[strName];
  300. }
  301. /// <summary>
  302. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  303. /// </summary>
  304. /// <param name="strName">参数</param>
  305. /// <returns>Url或表单参数的值</returns>
  306. public static string GetString(string strName)
  307. {
  308. return GetString(strName, false);
  309. }
  310. /// <summary>
  311. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  312. /// </summary>
  313. /// <param name="strName">参数</param>
  314. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  315. /// <returns>Url或表单参数的值</returns>
  316. public static string GetString(string strName, bool sqlSafeCheck)
  317. {
  318. if ("".Equals(GetQueryString(strName)))
  319. return GetFormString(strName, sqlSafeCheck);
  320. return GetQueryString(strName, sqlSafeCheck);
  321. }
  322. /// <summary>
  323. /// 获得Url或表单参数的值, 先判断Url参数是否为空字符串, 如为True则返回表单参数的值
  324. /// </summary>
  325. /// <param name="strName">参数</param>
  326. /// <param name="sqlSafeCheck">是否进行SQL安全检查</param>
  327. /// <param name="defValue">当SQL安全检查不通过或无值时的默认值</param>
  328. /// <returns>Url或表单参数的值</returns>
  329. public static string GetString(string strName, bool sqlSafeCheck, string defValue)
  330. {
  331. if ("".Equals(GetQueryString(strName)))
  332. return GetFormString(strName, sqlSafeCheck, defValue);
  333. return GetQueryString(strName, sqlSafeCheck, defValue);
  334. }
  335. /// <summary>
  336. /// 获得指定Url参数的int类型值
  337. /// </summary>
  338. /// <param name="strName">Url参数</param>
  339. /// <returns>Url参数的int类型值</returns>
  340. public static int GetQueryInt(string strName)
  341. {
  342. return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], 0);
  343. }
  344. /// <summary>
  345. /// 获得指定Url参数的int类型值
  346. /// </summary>
  347. /// <param name="strName">Url参数</param>
  348. /// <param name="defValue">缺省值</param>
  349. /// <returns>Url参数的int类型值</returns>
  350. public static int GetQueryInt(string strName, int defValue)
  351. {
  352. return TypeConverter.StrToInt(HttpContext.Current.Request.QueryString[strName], defValue);
  353. }
  354. /// <summary>
  355. /// 获得指定表单参数的int类型值
  356. /// </summary>
  357. /// <param name="strName">表单参数</param>
  358. /// <param name="defValue">缺省值</param>
  359. /// <returns>表单参数的int类型值</returns>
  360. public static int GetFormInt(string strName, int defValue)
  361. {
  362. return TypeConverter.StrToInt(HttpContext.Current.Request.Form[strName], defValue);
  363. }
  364. /// <summary>
  365. /// 获得指定Url或表单参数的int类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值
  366. /// </summary>
  367. /// <param name="strName">Url或表单参数</param>
  368. /// <param name="defValue">缺省值</param>
  369. /// <returns>Url或表单参数的int类型值</returns>
  370. public static int GetInt(string strName, int defValue)
  371. {
  372. if (GetQueryInt(strName, defValue) == defValue)
  373. return GetFormInt(strName, defValue);
  374. return GetQueryInt(strName, defValue);
  375. }
  376. /// <summary>
  377. /// 获得指定Url参数的float类型值
  378. /// </summary>
  379. /// <param name="strName">Url参数</param>
  380. /// <param name="defValue">缺省值</param>
  381. /// <returns>Url参数的int类型值</returns>
  382. public static float GetQueryFloat(string strName, float defValue)
  383. {
  384. return TypeConverter.StrToFloat(HttpContext.Current.Request.QueryString[strName], defValue);
  385. }
  386. /// <summary>
  387. /// 获得指定表单参数的float类型值
  388. /// </summary>
  389. /// <param name="strName">表单参数</param>
  390. /// <param name="defValue">缺省值</param>
  391. /// <returns>表单参数的float类型值</returns>
  392. public static float GetFormFloat(string strName, float defValue)
  393. {
  394. return TypeConverter.StrToFloat(HttpContext.Current.Request.Form[strName], defValue);
  395. }
  396. /// <summary>
  397. /// 获得指定Url或表单参数的float类型值, 先判断Url参数是否为缺省值, 如为True则返回表单参数的值
  398. /// </summary>
  399. /// <param name="strName">Url或表单参数</param>
  400. /// <param name="defValue">缺省值</param>
  401. /// <returns>Url或表单参数的int类型值</returns>
  402. public static float GetFloat(string strName, float defValue)
  403. {
  404. if (GetQueryFloat(strName, defValue) == defValue)
  405. return GetFormFloat(strName, defValue);
  406. return GetQueryFloat(strName, defValue);
  407. }
  408. /// <summary>
  409. /// 获得当前页面客户端的IP
  410. /// </summary>
  411. /// <returns>当前页面客户端的IP</returns>
  412. public static string GetIP()
  413. {
  414. try
  415. {
  416. string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  417. if (string.IsNullOrEmpty(result))
  418. result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  419. if (string.IsNullOrEmpty(result))
  420. result = HttpContext.Current.Request.UserHostAddress;
  421. if (string.IsNullOrEmpty(result) || !ValidateString.IsIP(result))
  422. return "127.0.0.1";
  423. return result;
  424. }
  425. catch
  426. {
  427. return "127.0.0.1";
  428. }
  429. }
  430. /// <summary>
  431. /// 获取URL地址的网页内容
  432. /// </summary>
  433. public class GetUrlText
  434. {
  435. /// <summary>
  436. /// Gets the text.
  437. /// </summary>
  438. /// <param name="url">地址 The URL.</param>
  439. /// <param name="Encoding">编码 The encoding.</param>
  440. /// <returns></returns>
  441. public static string GetText(string url, string Encoding)
  442. {
  443. WebResponse wr_result = null;
  444. var txthtml = new StringBuilder();
  445. try
  446. {
  447. WebRequest wr_req = WebRequest.Create(url);
  448. wr_result = wr_req.GetResponse();
  449. Stream ReceiveStream = wr_result.GetResponseStream();
  450. Encoding encode = System.Text.Encoding.GetEncoding(Encoding);
  451. var sr = new StreamReader(ReceiveStream, encode);
  452. if (true)
  453. {
  454. var read = new Char[256];
  455. int count = sr.Read(read, 0, 256);
  456. while (count > 0)
  457. {
  458. var str = new String(read, 0, count);
  459. txthtml.Append(str);
  460. count = sr.Read(read, 0, 256);
  461. }
  462. }
  463. }
  464. catch (Exception)
  465. {
  466. txthtml.Append("err");
  467. }
  468. finally
  469. {
  470. if (wr_result != null)
  471. {
  472. wr_result.Close();
  473. }
  474. }
  475. return txthtml.ToString();
  476. }
  477. public static string GetText(string HttpUrl)
  478. {
  479. try
  480. {
  481. HttpHelperay http = new HttpHelperay();
  482. HttpItem item = new HttpItem()
  483. {
  484. URL = HttpUrl,//URL 必需项
  485. Method = "get",//URL 可选项 默认为Get
  486. IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
  487. Cookie = "",//字符串Cookie 可选项
  488. Referer = "",//来源URL 可选项
  489. Postdata = "",//Post数据 可选项GET时不需要写
  490. Timeout = 100000,//连接超时时间 可选项默认为100000
  491. ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
  492. ContentType = "text/html",//返回类型 可选项有默认值
  493. Allowautoredirect = false,//是否根据301跳转 可选项
  494. //CerPath = "d:\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
  495. //Connectionlimit = 1024,//最大连接数 可选项 默认为1024
  496. ProxyIp = "",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数
  497. //ProxyPwd = "123456",//代理服务器密码 可选项
  498. //ProxyUserName = "administrator",//代理服务器账户名 可选项
  499. };
  500. var result = http.GetHtml(item);
  501. string html = result.Html;
  502. return html;
  503. //var request = (HttpWebRequest)HttpWebRequest.Create(HttpUrl);
  504. //var response = (HttpWebResponse)request.GetResponse();
  505. //var strConfig = String.Empty;
  506. //using (var reader = new StreamReader(response.GetResponseStream()))
  507. //{
  508. // strConfig = reader.ReadToEnd();
  509. //}
  510. //return strConfig;
  511. }
  512. catch (Exception)
  513. {
  514. return "";
  515. }
  516. }
  517. }
  518. /// 转全角的函数(SBC case)
  519. ///
  520. ///任意字符串
  521. ///全角字符串
  522. ///
  523. ///全角空格为12288,半角空格为32
  524. ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  525. ///
  526. public static String ToSBC(String input)
  527. {
  528. // 半角转全角:
  529. char[] c = input.ToCharArray();
  530. for (int i = 0; i < c.Length; i++)
  531. {
  532. if (c[i] == 32)
  533. {
  534. c[i] = (char)12288;
  535. continue;
  536. }
  537. if (c[i] < 127)
  538. c[i] = (char)(c[i] + 65248);
  539. }
  540. return new String(c);
  541. }
  542. /**/
  543. // /
  544. // / 转半角的函数(DBC case)
  545. // /
  546. // /任意字符串
  547. // /半角字符串
  548. // /
  549. // /全角空格为12288,半角空格为32
  550. // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  551. // /
  552. public static String ToDBC(String input)
  553. {
  554. char[] c = input.ToCharArray();
  555. for (int i = 0; i < c.Length; i++)
  556. {
  557. if (c[i] == 12288)
  558. {
  559. c[i] = (char)32;
  560. continue;
  561. }
  562. if (c[i] > 65280 && c[i] < 65375)
  563. c[i] = (char)(c[i] - 65248);
  564. }
  565. return new String(c);
  566. }
  567. /// <summary>
  568. /// 去掉所有的非数字
  569. /// </summary>
  570. /// <param name="key"></param>
  571. /// <returns></returns>
  572. public static string RemoveNotNumber(string key)
  573. {
  574. return Regex.Replace(key, @"[^\d]*", "");
  575. }
  576. /// <summary>
  577. /// 去掉所有的数字
  578. /// </summary>
  579. /// <param name="key"></param>
  580. /// <returns></returns>
  581. public static string RemoveNumber(string key)
  582. {
  583. return Regex.Replace(key, @"\d", "");
  584. }
  585. }
  586. }