C# 构造post参数一种看起来直观点的方法

来源:互联网 发布:手机维修记账软件 编辑:程序博客网 时间:2024/06/06 05:01

因为本人经常爱用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);

代码运行结果:



到这里应该差不多了,有什么不对的地方希望各位能指正出来。



0 0
原创粉丝点击