博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
URL太长导致参数被截断的问题
阅读量:6309 次
发布时间:2019-06-22

本文共 2518 字,大约阅读时间需要 8 分钟。

  hot3.png

    做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的长度限制,可以传递大数据量的参数了:)

转载于:https://my.oschina.net/ind/blog/311903

你可能感兴趣的文章
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>
网络编程中常见结构体
查看>>
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>
configure: error: in `/root/httpd-2.2.11/srclib/apr': c
查看>>
CentOS7搭建Kubernetes-dashboard管理服务
查看>>
buildroot下查找外部编译器通过ext-toolchain-wrapper调用的参数
查看>>
MySQL Replication 主主配置详细说明
查看>>