1、当参数的数据较大时。WebClient同步。

//实例化
WebClient client = new WebClient();
//地址
string path = "http://127.0.0.1/a/b";
//数据较大的参数
string datastr = "id=" + System.Web.HttpUtility.UrlEncode(ids);
//参数转流
byte[] bytearray = Encoding.UTF8.GetBytes(datastr);
//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//长度
client.Headers.Add("ContentLength", bytearray.Length.ToString());
//上传,post方式,并接收返回数据(这是同步,需要等待接收返回值)
byte[] responseData = client.UploadData(path, "POST", bytearray);
//释放
client.Dispose();
//处理返回数据(一般用json)
string srcString = Encoding.UTF8.GetString(responseData);

疑惑:参数是一段 xml ,并且已经加密,xml数据量较小只是几段文字。此时此方法不好使,但是用方式三就是好使的,原因未知。

2、当参数的数据较大时。WebClient异步(接上面的代码)。

//绑定事件,为了获取返回值
client.UploadDataCompleted += new UploadDataCompletedEventHandler(UploadDataCallback2);
//这里是url地址
Uri uri = new Uri(url);
//异步post提交,不用等待。
client.UploadDataAsync(uri, "POST", bytearray); //接收返回值的方法
public static void UploadDataCallback2(Object sender, UploadDataCompletedEventArgs e)
{
//接收返回值
byte[] data = (byte[])e.Result;
//转码
string reply = Encoding.UTF8.GetString(data);
//打印日志
LogResult("返回数据:" + reply + "\n");
}

3、当参数的数据正常时

//地址
string url = "http://127.0.0.1:8080/action?id=" + id + "";
//实例化
WebClient client = new WebClient();
//上传并接收数据
Byte[] responseData = client.DownloadData(url);
//接收返回的json的流数据,并转码
string srcString = Encoding.UTF8.GetString(responseData);

4、超时时间设置

//需要新写个类继承WebClient,并重写
//然后实例化,就可以设置超时时间了。
例:WebClient webClient = new WebDownload(); /// <summary>
/// WebClient 超时设置
/// </summary>
public class WebDownload : WebClient
{
private int _timeout;
// 超时时间(毫秒)
public int Timeout
{
get
{
return _timeout;
}
set
{
_timeout = value;
}
}
public WebDownload()
{
//设置时间
this._timeout = ;
}
public WebDownload(int timeout)
{
this._timeout = timeout;
}
protected override WebRequest GetWebRequest(Uri address)
{
var result = base.GetWebRequest(address);
result.Timeout = this._timeout;
return result;
}
}

5、WebRequest方式

//地址
string url = "http://127.0.0.1/a/b?pro=" + pro;
//传的参数
string datastr1 = "id=" + System.Web.HttpUtility.UrlEncode(ids);
//转成字节
byte[] bytearray1 = Encoding.UTF8.GetBytes(datastr1);
//创建WebRequest
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url);
//POST方式
webrequest.Method = "POST";
// <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
webrequest.ContentType = "application/x-www-form-urlencoded";
//获取字节数
webrequest.ContentLength = Encoding.UTF8.GetByteCount(datastr1);
//获取用于写入请求数据的 System.IO.Stream 对象
Stream webstream = webrequest.GetRequestStream();
//向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数。
webstream.Write(bytearray1, , bytearray1.Length);
//获取返回数据
HttpWebResponse response = (HttpWebResponse)webrequest.GetResponse();
//转码
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
//返回的结果
string ret = sr.ReadToEnd();
//关闭
sr.Close();
response.Close();
webstream.Close();

C# 带参访问接口,WebClient方式的更多相关文章

  1. 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...

  2. C#调用JAVA接口WSSE方式用WebClient方式

    C#读取JAVA的WSSE接口的调用代码: 用webclient 方式: /// <summary> /// 调用java cxf ws_security加密的服务wcf客户端对应的加密类 ...

  3. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  5. libcurl 接口调用方式

    http://hi.baidu.com/tracyu1026/item/bb6d5def4292b10b570f1d48 libcurl提供了一组C语言API函数直接调用.首先需要提到的两个函数就是c ...

  6. HttpClient 远程接口调用方式

    远程接口调用方式HttpClient 问题:现在我们已经开发好了接口了,那该如何调用这个接口呢? 答:使用Httpclient客户端.   Httpclient简介 什么是httpclient Htt ...

  7. C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现

    C# 默认是不能修改已装箱了的值类型中字段的值,但是可以通过 值类型实现指定的接口来改变 首先定义一个接口 interface IChange { void Change(int a, int b); ...

  8. .NET中的三种接口实现方式

    摘自:http://www.cnblogs.com/zhangronghua/archive/2009/11/25/1610713.html 一般来说.NET提供了三种不同的接口实现方式,分别为隐式接 ...

  9. Java调用第三方http接口的方式

    1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...

随机推荐

  1. js 返回前一页并刷新页面方法

    [导读] 要返回上一页再刷新页面我们用到最多的是在像php,asp,jsp,asp.net中,下面我来给大家先介绍js 返回前一页并刷新页面,然后再把这些代码放在php中实现删除后返回当前页面并刷新页 ...

  2. Ferry Loading||

    uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...

  3. 我的VSTO之路(二):VSTO程序基本知识

    原文:我的VSTO之路(二):VSTO程序基本知识 开始之前,首先我介绍一下我的开发环境:VS2010 + Office 2010,是基于.Net framework 4.0和VSTO 4.0.以下的 ...

  4. PlatformTransactionManager

    Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactio ...

  5. Static Final用法

    一.final数据 在 java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量.对于这种情况,编译器可以将此常量值带入需要用到它的计算式子当中,这种在编译时 执行计算式的方法减轻了运行时的 ...

  6. Annikken Andee–Arduino与Android间的简易连接

    一个Arduino的兼容板,允许你显示并控制来自Android设备的Arduino应用.无需Anroid APP开发. 点击:观看视频 什么是Annikken Andee? Annikken Ande ...

  7. P2032 「Poetize9」升降梯上

    描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄.Nescafe之塔一共有N层,升降 ...

  8. 【转】通知 Toast详细用法(显示view)

    原文网址:http://www.pocketdigi.com/20100904/87.html 今天学习Android通知 Toast的用法,Toast在手机屏幕上向用户显示一条信息,一段时间后信息会 ...

  9. 在Win7下用XManager远程控制ubuntu

    在Win7下用XManager远程控制ubuntu   远程主机通过xdmcp协议连接到ubuntu的图形终端,以图形终端方式登录. 远程主机是win7.ubuntu装在VMware虚拟机上,ubun ...

  10. 网络流(最大流):COGS 28 [NOI2006] 最大获利

    28. [NOI2006] 最大获利 ★★★☆   输入文件:profit.in   输出文件:profit.out   简单对比 时间限制:2 s   内存限制:512 MB [问题描述] 新的技术 ...