URL太长导致参数被截断的问题

27 篇文章 0 订阅
做Web开发时经常涉及到页面之间的转跳,页面之间的转跳就会涉及到页面之间参数的传递,通过URL传递参数是常用的方法之一,但是微软说:"Maximum URL length is 2,083 characters in Internet Explorer",也就是说URL是有长度限制的。

    ASP.NET应用程序前台与后台的数据交换都是通过FORM表单来完成的,FORM表单提供了两种数据传输方式:GET和POST,这个两种数据传输方式在实际传输中有很大的不同,但ASP.NET框架中已经屏蔽了二者的一些差异。GET是用来从服务器上获得数据,而POST是用来向服务器提交数据的。二者 数据传输过程中分别对应了HTTP协议中的GET和POST方法。

    GET方式是把参数数据队列加到提交表单的ACTION属性所指的URL后面,并且使用"?"隔开,值和表单内各个字段一一对应,在URL中可以看到,它是FROM默认的提交方式,受URL长度的限制,它所能传递的数据量小。
    POST方式是把表单中的数据放在FORM载体中, 按照变量和值相对应的方式,传递到ACTION所指向URL,POST可以传递大数据量的信息到服务器,通常文件上传就是使用POST方式上传。

    为解决GET方式传递大数据量参数的问题,要使用POST方式进行数据提交,下面是一个用来代替window.open的方法
1.JavaScript
/*
  * PostNewWin
  * Author:ppchen
  */
var PostNewWin = function(url){
     var urlArr = url.split("?");
     var postUrl = urlArr[0];
     var postData = urlArr[1];
     var iframe = document.getElementById("postData_iframe");
     if(!iframe){
         iframe = document.createElement("iframe");
         iframe.id = "postData_iframe";
         iframe.scr= "about:blank";
         iframe.frameborder = "0";
         iframe.style.width = "0px";
         iframe.style.height = "0px";
         
         var form = document.createElement("form");
         form.id = "postData_form";
         form.method = "post";
         form.target = "_blank";
         
         document.body.appendChild(iframe);
         iframe.contentWindow.document.write("<body>" + form.outerHTML + "</body>");
     }
     iframe.contentWindow.document.getElementById("postData_form").innerHTML = "<input name='postData' id='postData' type='text' value='" + postData + "'/>";
     iframe.contentWindow.document.getElementById("postData_form").action = postUrl;
     iframe.contentWindow.document.getElementById("postData_form").submit();
 };

2.CSharp
/// <summary>
/// 从Form中取得参数
/// Author:ppchen
/// </summary>
/// <returns>参数集合</returns>
private NameValueCollection ParseFormData()
 {
     NameValueCollection sQueryString = new NameValueCollection();
     if (this.Request.Form.Count > 0 && this.Request.Form["postData"] != null)
     {
         string sPostData = this.Request.Form["postData"].ToString();
         sPostData = sPostData.Trim(new char[] { '&', ' ' });
         if (!string.IsNullOrEmpty(sPostData))
         {
             string[] sParameterList = sPostData.Split('&');
             for (int i = 0; i < sParameterList.Length; i++)
             {
                 string[] sParameter = sParameterList[i].Split('=');
                 for (int j = 0; j < sParameter.Length; j = j + 2)
                 {
                     sQueryString.Add(sParameter[j], HttpUtility.UrlDecode(sParameter[j + 1]));
                 }
             }
         }
     }
     return sQueryString;
 }

通过以上的JS代码在客户端打开页面,通过以上的CS代码在服务端取得参数,这样使用了POST方式解决了GET方式中URL的长度限制,可以传递大数据量的参数了:)

测试代码下载:
PostNewWin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值