首页 > 代码库 > URL太长导致参数被截断的问题
URL太长导致参数被截断的问题
做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
2.CSharp
通过以上的JS代码在客户端打开页面,通过以上的CS代码在服务端取得参数,这样使用了POST方式解决了GET方式中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=http://www.mamicode.com/‘ " + postData + " ‘/> " ;
iframe.contentWindow.document.getElementById( " postData_form " ).action = postUrl;
iframe.contentWindow.document.getElementById( " postData_form " ).submit();
};
* 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=http://www.mamicode.com/‘ " + 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;
}
/// 从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的长度限制,可以传递大数据量的参数了:)
URL太长导致参数被截断的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。