C# 构造post参数一种看起来直观点的方法[转]
因为本人经常爱用C#做一些爬虫类的小东西,每次构造post参数的时候,都是直接字符串拼接的方式的,有时候改起来不太方便。
场景:
需要post一个地址
参数列表 :
username:管理员
password:123456
xxx:xxx
我想大部分人可能会这样写
- string username = "管理员";
- string password = "123456";
- string xxx = "xxx";
- string postdata = string.Format("username={0}&password={1}&xxx={2}", username, password, xxx);
直接用字符串来拼接的,这样写是最直接的,我一直都是这样写,然后到后来,比如参数十几二十个的时候,不知道{7}跟{8}是谁,甚至有时候password手滑打成了pasword
碰到这些情况很蛋疼,因为这样并不怎么直观。
然后我想到了下面的方法
首先是定义了一个静态方法,方便调用,注意参数类型
此方法2.0版本以上都是支持的。
- public static string CreatePostData(Dictionary<string, string> PostParameters)
- {
- string postdata = string.Empty;
- foreach (var item in PostParameters)
- {
- if (postdata != string.Empty)
- postdata += "&";
- postdata += item.Key + "=" + item.Value;
- }
- return postdata;
- }
然后还有Linq版的,需要3.5版本以上不罗嗦
- public static string CreatePostData(Dictionary<string, string> PostParameters)
- {
- var query = from s in PostParameters select s.Key + "=" + s.Value;
- string[] parameters = query.ToArray<string>();
- return string.Join("&", parameters);
- }
甚至还可以写成扩展方法,这里就不写了。
然后构造post参数的时候就可以这样
- Dictionary<string, string> parameters = new Dictionary<string, string>();
- parameters.Add("username", "管理员");
- parameters.Add("password", "123456");
- parameters.Add("xxx", "xxx");
- string postdata = CreatePostData(parameters);
因为post参数是键值对应的,这里用字典的形式来表示出来,我个人感觉应该是蛮直观了,以后需要修改哪个参数,直接定位
代码运行结果:
当然,有时候我们POST参数包含中文啊或者一些敏感字符,就需要进行urlencode了,下面是方法
- //此方法需要添加System.Web引用 程序集:System.Web(在 system.web.dll 中)
- //参数IsEncode 默认为 false 表示不需要转码,需要转码的时候指定参数为True即可
- public static string CreatePostData(Dictionary<string, string> PostParameters,bool IsEncode = false)
- {
- var query = from s in PostParameters select s.Key + "=" + (IsEncode ? System.Web.HttpUtility.UrlEncode(s.Value) : s.Value);
- string[] parameters = query.ToArray<string>();
- return string.Join("&", parameters);
- }
- Dictionary<string, string> parameters = new Dictionary<string, string>();
- parameters.Add("username", "管理员");
- parameters.Add("password", "123456");
- parameters.Add("xxx", "xxx");
- string postdata = CreatePostData(parameters,true);
代码运行结果:
到这里应该差不多了,有什么不对的地方希望各位能指正出来。
原文地址:http://blog.csdn.net/qq807081817/article/details/38053011
C# 构造post参数一种看起来直观点的方法[转]的更多相关文章
- Mybatis传多个参数(三种解决方案)
第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...
- ios页面间传递参数四种方式
ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...
- SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求
1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将 ...
- 如何使用Feign构造多参数的请求
原文:http://www.itmuch.com/spring-cloud-sum/feign-multiple-params/ 本节来探讨如何使用Feign构造多参数的请求.笔者以GET及POST请 ...
- MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则
MVC路由:由于路由global中注册了,在程序第一次运行时,在MVC会自动生成路由,类似于字典的格式缓存下来,但路由生成的规则又是怎样的呢? 路由生成规则是: 1>更具你定义的的顺序查找路由规 ...
- JUC之线程池-三大方法-七大参数-四种拒绝策略
线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...
- 4种检测是否支持HTML5的方法,你知道几个?
4种检测是否支持HTML5的方法,你知道几个? 1,检查特定的属性是否存在于全局的对象里面,比如说window或navigator. 比如geolocation,它是HTML5新加支持的新特性:它是由 ...
- MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...
- 两种计算Java对象大小的方法
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...
随机推荐
- C# FromBase64String 解码换行问题
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如 ...
- Python~迭代
dict #默认情况下,dict迭代的是key 迭代value #迭代key,value for value in d.itervalues(): for k,v in d. ...
- android so调试时遇到的坑 - arm流水线
直接看下面这段ARM汇编: 此时运行到的代码为ADD R3,PC 此时看一下寄存器窗口的值: 按理来说执行完ADD R3,PC后的效果应该是R3=R3+PC ,R3=40A1D5C8 但是我们可以执行 ...
- nfs部署和优化
nfs--网络文件系统 1.说明:允许一个系统在网络上与他人共享目录和文件 2.好处:通过nfs服务,就可以让这个机器访问远程的文件,像访问自己的文件一样,属于cs通信 3.原理说明:假设有A,B ...
- .NET LINQ 限定符操作
限定符操作 限定符运算返回一个 Boolean 值,该值指示序列中是否有一些元素满足条件或是否所有元素都满足条件. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表 ...
- MySQL 编译安装并且开启DEBUG模式
因为想分析下mysql中一些操作的内部执行过程,单纯的看源码太枯燥了,所以决定结合mysql的执行过程来分析,mysql作为一款成熟的数据库软件,在设计的时候就考虑到了调试的问题,只是想开启调试模式的 ...
- 模拟搭建Web项目的真实运行环境(一)
序言 最近尝试完整搭建一个Web项目的运行环境,总结一下这几个月学到的知识点. 后面的文章主要包括一下几个内容: A. 搭建一个Linux服务器,用来部署Redis.Mongo等数据存储环境: B. ...
- springMVC 的工作原理和机制
工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...
- Pfile VS Spfile (MOS Note 249664.1)
============================================================================== Until Oracle 8i DBAs ...
- [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)
之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类,重写On ...