• 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


  • 相关阅读:
    convex hull
    不努力,你就没有资格谈天赋
    “数数”的感悟
    平行四边形法则的感悟
    ansys 15 Linux 安装问题
    SHV-E210S 刷4.3
    fedora 安装 Oracle11g 遇到的问题
    ObjectArx开发常用资料
    MFC入门(二)
    MFC入门(三)
  • 原文地址:https://www.cnblogs.com/chenjunbiao/p/1760162.html
Copyright © 2020-2023  润新知