[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 }

转载于:https://www.cnblogs.com/briny/archive/2012/08/14/2637336.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值