• [Visaul C#] 自己实现的一个HttpContextHelper有多处方法,可实现强大的HTTP请求处理


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.Web;
      5 using System.Collections.Specialized;
      6 using eBriny.Framework.Core;
      7 
      8 namespace eBriny.Framework.Web
      9 {
     10     /// <summary>
     11     /// HttpContext处理类
     12     /// </summary>
     13     public class HttpContextHelper
     14     {
     15         private static HttpContextHelper _Instance = new HttpContextHelper();
     16 
     17         private HttpContextHelper()
     18         {
     19         }
     20 
     21         /// <summary>
     22         /// 实例
     23         /// </summary>
     24         public static HttpContextHelper Instance
     25         {
     26             get
     27             {
     28                 if (EnvironmentHelper.Mode == EnvironmentHelper.InstanceMode.Windows)
     29                 {
     30                     throw new NotSupportedException();
     31                 }
     32                 return _Instance;
     33             }
     34         }
     35 
     36         /// <summary>
     37         /// 获取当前HttpContext.Request中参数的值
     38         /// </summary>
     39         /// <typeparam name="T">数据类型</typeparam>
     40         /// <param name="key">参数名称</param>
     41         /// <param name="objValue">如果值为空或不存在返回的默认值</param>
     42         /// <returns></returns>
     43         public T GetRequestParameterValue<T>(string key, T objValue)
     44         {
     45             return GetRequestParameterValue<T>(key, objValue, false);
     46         }
     47 
     48         /// <summary>
     49         /// 获取当前HttpContext.Request中参数的值
     50         /// </summary>
     51         /// <typeparam name="T">数据类型</typeparam>
     52         /// <param name="key">参数名称</param>
     53         /// <param name="objValue">如果值为空或不存在返回的默认值</param>
     54         /// <param name="urlDecode">是否需要UrlDecode解码操作</param>
     55         /// <returns></returns>
     56         public T GetRequestParameterValue<T>(string key, T objValue, bool urlDecode)
     57         {
     58             if (!string.IsNullOrEmpty(HttpContext.Current.Request[key]))
     59             {
     60                 return (T)Convert.ChangeType(urlDecode ?
     61                     HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request[key]) :
     62                     HttpContext.Current.Request[key], typeof(T));
     63             }
     64 
     65             return objValue;
     66         }
     67 
     68         /// <summary>
     69         /// 将参数重新组合成Url
     70         /// </summary>
     71         /// <param name="uriString">url</param>
     72         /// <param name="requestParamsArray">参数集合的数组</param>
     73         /// <returns>补充了参数的url</returns>
     74         public string CombineUrlParams(string uriString, params NameValueCollection[] requestParamsArray)
     75         {
     76             return CombineUrlParams(uriString, Encoding.UTF8, requestParamsArray);
     77         }
     78 
     79         /// <summary>
     80         /// 将参数重新组合成Url
     81         /// </summary>
     82         /// <param name="uriString">url</param>
     83         /// <param name="encoding">字符编码</param>
     84         /// <param name="requestParamsArray">参数集合的数组</param>
     85         /// <returns>补充了参数的url</returns>
     86         public string CombineUrlParams(string uriString, Encoding encoding, params NameValueCollection[] requestParamsArray)
     87         {
     88             if (string.IsNullOrEmpty(uriString))
     89             {
     90                 throw new ArgumentNullException("uriString");
     91             }
     92             if (encoding == null)
     93             {
     94                 throw new ArgumentNullException("encoding");
     95             }
     96             if (requestParamsArray == null)
     97             {
     98                 throw new ArgumentNullException("requestParamsArray");
     99             }
    100 
    101             NameValueCollection requestParams = MergeParamsCollection(requestParamsArray);
    102 
    103             StringBuilder strBuilder = new StringBuilder(1024);
    104 
    105             string leftPart = string.Empty;
    106 
    107             int startIndex = uriString.IndexOf('?');
    108 
    109             leftPart = (startIndex >= 0) ? uriString.Substring(0, startIndex) : uriString;
    110 
    111             for (int i = 0; i < requestParams.Count; i++)
    112             {
    113                 strBuilder.Append(i.Equals(0) ? "?" : "&");
    114 
    115                 strBuilder.AppendFormat("{0}={1}",
    116                     HttpUtility.UrlEncode(requestParams.Keys[i], encoding),
    117                     HttpUtility.UrlEncode(requestParams[i], encoding));
    118             }
    119 
    120             return string.Format("{0}{1}", leftPart, strBuilder.ToString());
    121         }
    122 
    123         /// <summary>
    124         /// 得到URL锚点的信息。"#"后面的部分
    125         /// </summary>
    126         /// <param name="queryString">请求的字符串(http://localhost/lianhome#littleTurtle)</param>
    127         /// <returns></returns>
    128         public string GetAnchorPointStringInUrl(string queryString)
    129         {
    130             if (string.IsNullOrEmpty(queryString))
    131             {
    132                 throw new ArgumentNullException("queryString");
    133             }
    134 
    135             int anchorPointStart = -1;
    136 
    137             for (int i = queryString.Length - 1; i >= 0; i--)
    138             {
    139                 if (queryString[i].Equals('#'))
    140                 {
    141                     anchorPointStart = i;
    142                 }
    143                 else
    144                 {
    145                     if (queryString[i].Equals('&') || queryString[i].Equals('?'))
    146                     {
    147                         break;
    148                     }
    149                 }
    150             }
    151 
    152             string result = string.Empty;
    153 
    154             if (anchorPointStart >= 0)
    155             {
    156                 result = queryString.Substring(anchorPointStart);
    157             }
    158 
    159             return result;
    160         }
    161 
    162         #region 私有方法
    163         private NameValueCollection MergeParamsCollection(NameValueCollection[] requestParams)
    164         {
    165             NameValueCollection result = new NameValueCollection();
    166 
    167             for (int i = 0; i < requestParams.Length; i++)
    168                 MergeTwoParamsCollection(result, requestParams[i]);
    169 
    170             return result;
    171         }
    172 
    173         private void MergeTwoParamsCollection(NameValueCollection target, NameValueCollection src)
    174         {
    175             foreach (string key in src.Keys)
    176             {
    177                 if (target[key] == null)
    178                     target.Add(key, src[key]);
    179             }
    180         }
    181         #endregion
    182     }
    183 }
  • 相关阅读:
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    JAVA-蓝桥杯-算法训练-字符串变换
    Ceph:一个开源的 Linux PB 级分布式文件系统
    shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
  • 原文地址:https://www.cnblogs.com/briny/p/2637336.html
Copyright © 2020-2023  润新知