zoukankan      html  css  js  c++  java
  • Notes for 200811(GetRange, backup,file hash, PostRequest, QueryString)

    1、List<T>泛型中并没有实现ICloneable接口,也就是没有实出Clone方法,所以我们在克隆一个List时可以使用GetRange方法来代替它。

    List<int> oldList = new List();
    oldList.Add(
    1);
    oldList.Add(
    2);
    List
    <int> newList = oldList.GetRange(0,oldList.Count);

    2、 backup数据库

    BACKUP DATABASE ProfileDB TO DISK = 'D:\FULL_DATA\ProfileDB.bak' 
    WITH
     checksum, INIT, NOUNLOAD, NAME=N'ProfileDB Full backup', SKIP, STATS = 10, NOFORMAT

    3、计算文件的Hash值:

        protected void Page_Load(object sender, EventArgs e)
        {
            
    string filePath = Request.PhysicalPath;
            
    string hash = string.Empty;
            
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                
    using (MD5 md5 = MD5.Create())
                {
                    
    byte[] hashData = md5.ComputeHash(fs);
                    hash 
    = ConvertToHexString(hashData);
                    md5.Clear();
                }
                fs.Close();
            }
            Response.Write(hash);
        }
        
    private static string ConvertToHexString(byte[] bytes)
        {
            
    int length = bytes.Length;
            StringBuilder sb 
    = new StringBuilder();
            
    foreach (byte data in bytes)
            {
                sb.Append(data.ToString(
    "x2"));
            }
            
    return sb.ToString();
        }

    hash结果都是以32个字符来表示的16进制串,通过对每位招行ToString("x2")实现。

    4、封装对某一页面Post和Get操作。

            /// <summary>
            
    /// 通过Post和Get方式请求页面
            
    /// </summary>
            
    /// <param name="url">需要Post到的页面url</param>
            
    /// <param name="postData">post数据的字典</param>
            
    /// <param name="queryData">get查询的字典</param>
            
    /// <param name="timeout">超时时间(毫秒)</param>
            
    /// <returns>请求后的返回</returns>
            public static string RequestUrl(string url, IDictionary<stringstring> postData, IDictionary<stringstring> queryData, int timeout)
            {
                
    //参数验证
                if (url.IndexOfAny(new char[] { '?''&' }) > -1)
                    
    throw new ArgumentException("url不应该带参数");
                
    if (!url.StartsWith("http://"))
                    
    throw new ArgumentException("url必须以\"http://\"开头");
                if (postData == null)
                    postData 
    = new Dictionary<stringstring>();
                
    if (queryData == null)
                    queryData 
    = new Dictionary<stringstring>();

                
    //构造url
                StringBuilder urlBuilder = new StringBuilder();
                
    foreach (var kv in queryData)
                {
                    urlBuilder.Append(
    string.Format(CultureInfo.InvariantCulture, "{0}={1}&", kv.Key, HttpUtility.UrlEncode(kv.Value)));
                }
                
    string suffix = urlBuilder.Length > 0 ? ("?" + urlBuilder.ToString().TrimEnd('&')) : "";
                
    string postUrl = url + suffix;

                
    //构造Post数据
                StringBuilder dataBuilder = new StringBuilder();
                
    foreach (var kv in postData)
                {
                    dataBuilder.Append(
    string.Format(CultureInfo.InvariantCulture, "{0}={1}&", kv.Key, kv.Value));
                }
                
    string data = dataBuilder.Length > 0 ? dataBuilder.ToString().TrimEnd('&') : "";
                
    byte[] dataBytes = Encoding.UTF8.GetBytes(data);

                
    //发出请求
                string content = string.Empty;

                
    //HttpWebRequest
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(postUrl);
                request.Method 
    = "POST";
                request.ContentType 
    = "application/x-www-form-urlencoded";
                request.ContentLength 
    = dataBytes.Length;
                request.Timeout 
    = timeout;

                
    try
                {
                    
    //把dataBytes写入HttpWebRequest
                    using (Stream requestStream = request.GetRequestStream())
                    {
                        requestStream.Write(dataBytes, 
    0, dataBytes.Length);
                        requestStream.Close();
                    }
                    
    //获取HttpWebResponse
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        
    if (response.StatusCode == HttpStatusCode.OK)
                        {
                            
    using (Stream stream = response.GetResponseStream())
                            {
                                
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                                {
                                    content 
    = reader.ReadToEnd();
                                    reader.Close();
                                }
                                stream.Close();
                            }
                        }
                        response.Close();
                    }
                }
                
    catch (System.Net.WebException) { }
                
    finally
                {
                    
    if (request != null)
                    {
                        request.Abort();
                        request 
    = null;
                    }
                }

                
    return content;
            }

    5、Request.QueryString里对查询字符串强制进行了一次UrlDecode,但如何使用Request["id"]方式获取查询值时则需要手工进行一次UrlDecode


  • 相关阅读:
    gray-code——找规律
    [LeetCode] Decode Ways 解码方法个数、动态规划
    操作系统之面试常考(转)
    国内90%以上的 iOS 开发者,对 APNs 的认识都是错的
    vim配置为IDE环境(超详细,极力推荐 git)
    curl的使用(from 阮一峰)
    图片鉴黄服务提供商
    转: 【理念篇】关于数据驱动运维的几点认识
    业务调度链的染色数据上报和关联
    ITIL的考核管理体系
  • 原文地址:https://www.cnblogs.com/chenjunbiao/p/1760162.html
Copyright © 2011-2022 走看看