因为本人经常爱用C#做一些爬虫类的小东西,每次构造post参数的时候,都是直接字符串拼接的方式的,有时候改起来不太方便。

场景:

需要post一个地址

参数列表 :

username:管理员

password:123456

xxx:xxx

我想大部分人可能会这样写

  1. string username = "管理员";
  2. string password = "123456";
  3. string xxx = "xxx";
  4. string postdata = string.Format("username={0}&password={1}&xxx={2}", username, password, xxx);

直接用字符串来拼接的,这样写是最直接的,我一直都是这样写,然后到后来,比如参数十几二十个的时候,不知道{7}跟{8}是谁,甚至有时候password手滑打成了pasword

碰到这些情况很蛋疼,因为这样并不怎么直观。

然后我想到了下面的方法

首先是定义了一个静态方法,方便调用,注意参数类型

此方法2.0版本以上都是支持的。

  1. public static string CreatePostData(Dictionary<string, string> PostParameters)
  2. {
  3. string postdata = string.Empty;
  4. foreach (var item in PostParameters)
  5. {
  6. if (postdata != string.Empty)
  7. postdata += "&";
  8. postdata += item.Key + "=" + item.Value;
  9. }
  10. return postdata;
  11. }

然后还有Linq版的,需要3.5版本以上不罗嗦

  1. public static string CreatePostData(Dictionary<string, string> PostParameters)
  2. {
  3. var query = from s in PostParameters select s.Key + "=" + s.Value;
  4. string[] parameters = query.ToArray<string>();
  5. return string.Join("&", parameters);
  6. }

甚至还可以写成扩展方法,这里就不写了。

然后构造post参数的时候就可以这样

  1. Dictionary<string, string> parameters = new Dictionary<string, string>();
  2. parameters.Add("username", "管理员");
  3. parameters.Add("password", "123456");
  4. parameters.Add("xxx", "xxx");
  5. string postdata = CreatePostData(parameters);

因为post参数是键值对应的,这里用字典的形式来表示出来,我个人感觉应该是蛮直观了,以后需要修改哪个参数,直接定位

代码运行结果:

当然,有时候我们POST参数包含中文啊或者一些敏感字符,就需要进行urlencode了,下面是方法

  1. //此方法需要添加System.Web引用 程序集:System.Web(在 system.web.dll 中)
  2. //参数IsEncode 默认为 false 表示不需要转码,需要转码的时候指定参数为True即可
  3. public static string CreatePostData(Dictionary<string, string> PostParameters,bool IsEncode = false)
  4. {
  5. var query = from s in PostParameters select s.Key + "=" + (IsEncode ? System.Web.HttpUtility.UrlEncode(s.Value) : s.Value);
  6. string[] parameters = query.ToArray<string>();
  7. return string.Join("&", parameters);
  8. }
  1. Dictionary<string, string> parameters = new Dictionary<string, string>();
  2. parameters.Add("username", "管理员");
  3. parameters.Add("password", "123456");
  4. parameters.Add("xxx", "xxx");
  5. string postdata = CreatePostData(parameters,true);

代码运行结果:


 

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

原文地址:http://blog.csdn.net/qq807081817/article/details/38053011

C# 构造post参数一种看起来直观点的方法[转]的更多相关文章

  1. Mybatis传多个参数(三种解决方案)

    第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...

  2. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

  3. SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求

    1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将 ...

  4. 如何使用Feign构造多参数的请求

    原文:http://www.itmuch.com/spring-cloud-sum/feign-multiple-params/ 本节来探讨如何使用Feign构造多参数的请求.笔者以GET及POST请 ...

  5. MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则

    MVC路由:由于路由global中注册了,在程序第一次运行时,在MVC会自动生成路由,类似于字典的格式缓存下来,但路由生成的规则又是怎样的呢? 路由生成规则是: 1>更具你定义的的顺序查找路由规 ...

  6. JUC之线程池-三大方法-七大参数-四种拒绝策略

    线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...

  7. 4种检测是否支持HTML5的方法,你知道几个?

    4种检测是否支持HTML5的方法,你知道几个? 1,检查特定的属性是否存在于全局的对象里面,比如说window或navigator. 比如geolocation,它是HTML5新加支持的新特性:它是由 ...

  8. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  9. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...

随机推荐

  1. iOS/Android 浏览器(h5)及微信中唤起本地APP

    在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...

  2. HTML:让表单、文本框只读,不可编辑的方法

    有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使<input type="text" name="input1" value=&qu ...

  3. 【leetcode】Triangle (#120)

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  4. 简单理解Socket

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  5. 理解WebService SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  6. 用C#通过正则表达式截取字符串中符合条件的子字符串

    仅仅作为简单的记录,不多说直接上代码(仅测试使用): private void Test() { Regex ConnoteA = new Regex("^[a-zA-Z]\\d{8}$&q ...

  7. UWP x:bind

    x:bind 作为win10 新特性,它好在哪?为什么要用它. 最近做UWP,对代码进行重构,对它有了一些了解. 先说优点: 1.性能高,内存小(相比传统的binding) 没图没真相,我先上2张图. ...

  8. 《DSP using MATLAB》示例Example5.16

    代码: x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; x3 = conv(x1,x2); % N = 5 n1 = 0:1:length(x1)-1; n2 = 0:1:leng ...

  9. TDatabase TQuery TDataSource TDBGrid 设定方法

    TDatabase TQuery TDataSource TDBGrid object Database1: TDatabase AliasName = 'sfis' DatabaseName = ' ...

  10. jQuery Live Query 插件

    http://www.cnblogs.com/sunjing/archive/2008/12/06/1349097.html 上篇日志里写到的那个问题其实有种更简单的解决办法,就是使用jquery的L ...