zoukankan      html  css  js  c++  java
  • C# 构造post参数一种看起来直观点的方法[转]

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

    场景:

    需要post一个地址

    参数列表 :

    username:管理员

    password:123456

    xxx:xxx

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

    [csharp] view plain copy
     
    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版本以上都是支持的。

    [csharp] view plain copy
     
    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版本以上不罗嗦

    [csharp] view plain copy
     
    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参数的时候就可以这样

    [csharp] view plain copy
     
    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了,下面是方法

    [csharp] view plain copy
     
    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. }  
    [csharp] view plain copy
     
    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

  • 相关阅读:
    java 获取一些项目或系统属性
    js验证是否为空、数字、邮政编码、联系电话、传真、电子邮箱格式(公用js)
    转:RBAC用户角色权限设计
    转:HTTP Header 详解一
    Myeclipse 突然出现启动不了的解决办法
    位图排序java版
    排序算法 归并排序
    转:Java安全管理器(Security Manager)
    一种将0元素前置的实现方案
    排序算法 快速排序源码
  • 原文地址:https://www.cnblogs.com/mingjia/p/6102271.html
Copyright © 2011-2022 走看看