C#url相关知识

C#中Url地址重定向的方法:

1:Response.Redirect(url);

  这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳转到任何页面,没有站点页面限制,不能跳过登录保护。传递的数据以2KB为限

redirect跳转机制:首先是发送一个http请求到客户端,通知需要跳转到新页面,然后客户端在发送跳转请求到服务器端。需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到session。

2:Response.RedirectPermanent(url)

  在ASP.NET 4中引进了一个新的辅助方法,用来做一个HTTP 301 (永久性重定向)重新定向。这会导致能识别永久性重新定向的搜索引擎和其他用户代理保存和使用与内容相关联的新URL。这会使你的内容编入索引,你的搜索引擎页面排名得到提高。

3:Server.Transfer(url);

  速度快,只需要一次postback ,但是必须是在同一个站点下,因为它是Server的一个方法。另外,他能跳过登录保护。你可以写个小程序试试:设计一个由页面一到页面二的跳转,但要进入到页面二需要登录,form认证,但如果跳转语句使用transfer的话,那就不会弹出登录页面了。这个方法的重定向请求是发生在服务器端,所以浏览器的url地址仍然保留的是原页面的地址!

4:Server.Execute(url);

  这个方法主要是用在页面设计上面,而且他必须是跳转同一站点下的页面。这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中,将某一个页面类似于嵌套的方式存在于另一页面。占用资源

5:Response.Write("<script>window.open('"+url+"','_blank')</script>");

6:Page.ClientScript.RegisterClientScriptBlock(GetType(), "aaa", "<script>alert('调用成功');

7:System.Diagnostics.Process.Start(url);

 


 在项目中我们可能还会遇到一个问题,带参url刷新本页

我们可以使用键值对的方式来存储参数,并且重新追加到本页Url上

 private string GenericReloadUrl(NameValueCollection queryStrings)
        {
            if (queryStrings == null || queryStrings.Count == 0)
                return Request.Url.AbsolutePath;

            StringBuilder urlBuilder = new StringBuilder();
            string paramter;

            urlBuilder.Append(Request.Url.AbsolutePath).Append("?");
            foreach (string key in queryStrings.Keys)
            {
                paramter = queryStrings[key].Trim().Replace("'", "");
                if (!string.IsNullOrEmpty(paramter) && paramter.Length > 0)
                {
                    urlBuilder.Append(key).Append("=").Append(Server.UrlEncode(paramter)).Append("&");
                }
            }

            queryStrings.Clear();
            urlBuilder.Remove(urlBuilder.Length - 1, 1);

            return urlBuilder.ToString();
        }

  new一个NameValueCollection类将参数add到集合中调用方法重新拼接本地url并且直接跳转。


 

当然,我们项目中有可能会将参数加密,我们可以用到DESCryptoServiceProvider类

 #region ========加密========

        /// <summary>  
        /// 加密  
        /// </summary>  
        /// <param name="Text"></param>  
        /// <returns></returns>  
        public static string Encrypt(string Text)
        {
            return Encrypt(Text, "MATICSOFT");
        }
        /// <summary>   
        /// 加密数据   
        /// </summary>   
        /// <param name="Text"></param>   
        /// <param name="sKey"></param>   
        /// <returns></returns>   
        public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }

        #endregion

        #region ========解密========


        /// <summary>  
        /// 解密  
        /// </summary>  
        /// <param name="Text"></param>  
        /// <returns></returns>  
        public static string Decrypt(string Text)
        {
            return Decrypt(Text, "MATICSOFT");
        }
        /// <summary>   
        /// 解密数据   
        /// </summary>   
        /// <param name="Text"></param>   
        /// <param name="sKey"></param>   
        /// <returns></returns>   
        public static string Decrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

        #endregion

 

posted @ 2017-03-26 19:50  小屈  阅读(1279)  评论(0编辑  收藏  举报