.net 4.5版本WebRequest和Webclient中的一个url转义bug

有时我们把一个url带入到另一个url中作为参数,这个参数就需要转义。比如:

http://www.baidu.com/s?wd=http%3A%2F%2Fwww.baidu.com

在代码中进行访问这段地址的时候,我们也会期望它照着给的地址访问,在.net 4.0中,确实会如此。

但是如果切换为.net 4.5版本,你就会发现你访问的url实际变成了:

http://www.baidu.com/s?wd=http:%2F%2Fwww.baidu.com

大多数情况下它不会造成什么影响。

但一旦站点对url有某些要求或者验证的时候,它就会造成不符合预期的结果了。

比如:

某个站点需要对url请求进行验证,把url前面所有参数拼接起来生成md5,拼接到url最后的verify中,

然后在服务端验证md5和前面的参数的产生是否一致,返回success或者fail。

md5 = ToMD5String("param1=a&param2=b&param3=http%3A%2F%2Fwww.baidu.com");

.net4.0 访问地址:

http://www.xxx.com/do?param1=a&param2=b&param3=http%3A%2F%2Fwww.baidu.com&verify=md5   

response:success

一旦用了.net4.5访问,访问地址莫名其妙变了,就会变成验证不通过的情况了

http://www.xxx.com/do?param1=a&param2=b&param3=http:%2F%2Fwww.baidu.com&verify=md5  

response:fail

这就是我今天测试到的一个bug

时间: 2024-08-01 17:38:59

.net 4.5版本WebRequest和Webclient中的一个url转义bug的相关文章

解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细(转)

原文链接:解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细 题目 一步一步解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细. 解答 这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP地址. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 浏览器获取请求页面的html代码. 浏览器在显示窗口内渲染H

在浏览器中输入一个URL后都发生了什么

这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP地址. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 浏览器获取请求页面的html代码. 浏览器在显示窗口内渲染HTML. 窗口关闭时,浏览器终止与服务器的连接. 这其中最有趣的是第1步和第2步(域名解析).我们输入的网址(域名)是IP地址的一个别名, 在一个DNS内,一个域名对应

修改通用权限中的一个分页的BUG

BETWEEN {0} AND {1} 是两边数据都包含的,而RowNo是从1开始的,所以第一页的数据从0到50是正确的,但是第二页以及以后的页是从(x-1)*50到x*50的话,就会多出一条数据,需要在开始的位置+1,这样数据就正常了.

【方法3:Perl版本】删除Map中Value重复的记录,并且只保留Key最小的那条记录

icemouse210写了一个Perl版本的,发挥了脚本高度封装的优势.我把代码贴出来,供大家参考分享. #!/user/bin/perl -w use English; use strict; use warnings; my %test_hash=( "A" => '1', "B" => '2', "C" => "2", "D" => "3", "E

在WebClient中使用post[发送数据]

很多时候,我们需要使用C#中的WebClient 来收发数据,WebClient 类提供向 URI 标识的任何本地.Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法. 下面先说说WebClient 最主要的功能.     WebClient 构造函数 .Ctor 包括 一个空构造函数 和一个静态构造函数, 静态构造函数主要为UrlEncode 和UrlEncodeAndWirte 编码提供参照byte[]数据的初始化作用. stati WebClient()

传奇版本自动穿背包中的装备脚本

传奇版本自动穿背包中的装备脚本 适用于传奇一条龙开区功能:自动穿背包中的装备,TakeOn 物品名称 装备位置装备位置:0 = 衣服 1 = 武器 2 = 蜡烛 3 = 项链 4 = 头盔 5 = 左手镯 6 = 右手镯 7 = 左戒指 8 = 右戒指 9 = 护符 10 = 腰带 11 = 鞋子 12 = 宝石示例:#IF#ACTgive 逍遥扇 1give 天尊戒指 2give 天尊手镯 2give 天尊项链 1give 天尊头盔 1give 天师长袍 1give 天尊道袍 1give 兽皮

在Mac版本下的IDEA中设置代码注释模版

在使用IDEA开发的过程中,我们可以通过设置代码注释模版,实现注释信息的自动补齐,提高编码效率.我使用的是Mac电脑,就以Mac环境来进行说明吧. 在Mac上配置IDEA的代码注释模版,主要包括两个部分:一个是File Head文件头注释,用于描述类文件的信息:一个是方法头注释,用于描述类方法的信息.具体配置过程如下. 一.配置类文件头注释模版点击IDEA编译器左上角的"IntelliJ IDEA"按钮,选择"Preferences...",在弹出窗口中,选择&qu

C#中判断一个网址是否可以打开

public static void GetPage(String url) { try { // Creates an HttpWebRequest for the specified URL. HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); // Sends the HttpWebRequest and waits for a response. HttpWebResponse myHttpW

获取字符串中某一个字段的数据,GetValueFromStr

gps数据格式为:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A* /********************************************************************** *版权所有 (C)2015, Wuyq. * *文件名称: GetValueFromStr.c *内容摘要:用于演示从gps数据字符串中获取相应的内容 *其它说明:无 *当前版本: V1.0 *作