一个使用WebClient和WebApi上传下载数据的方法
来源:互联网 发布:电子电路图制作软件 编辑:程序博客网 时间:2024/05/16 04:51
WebClient封装了基于HTTP的GET/POST数据的多个操作,使用该类可以与ASP.NET WebApi框架通信,满足上传数据给服务器或从服务器下载数据的需求,使用的关键技术有:
1)如何通过HTTP查询串方式和GET方法上传数据给服务器,并获取返回结果。
2)如何通过HTTP查询串方式和POST方法上传大量数据给服务器,并获取返回结果。
1、路由配置
如下代码是ApiController的路由配置:
public static class WebApiConfig{public static void Register(HttpConfiguration config){config.Routes.MapHttpRoute(name: "DefaultApi2",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional });/* 可能引起多匹配动作的错误config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });*/}}
需要指出,可以保留上述第二个Api路由,但必须保持上述顺序,否则将报运行时错误:没有找到匹配的WebApi方法。
2、WebApiController函数
如下代码是ApiController中的两个测试函数:
public class TestApiController : ApiController{[HttpGet]public string GetString(string loginId, int count){return $"loginId={loginId}, count={count}";}[HttpPost]public async Task<string> UploadString(string loginId, int count){string str = await Request.Content.ReadAsStringAsync();return $"loginId={loginId}, count={count}, upload={str}";}}需要注意,在POST方法的UploadString函数使用了Request.Content的异步读取数据方法,可以异步获取HTTP上传POST的字符串(可能较大),该方法只提供了异步读取各种数据类型的方法,没有提供同步方法。
3、GET上传数据的测试代码
如下是通过查询串上传GET两个数据项的代码:
string addr = "http://localhost/sfsj/api/TestApi/GetString";WebClient webClient = new WebClient();webClient.Headers["ContentType"] = "text/plain";webClient.Encoding = Encoding.UTF8;webClient.QueryString["loginId"] = "客户";webClient.QueryString["count"] = "100";string text = webClient.DownloadString(addr);MessageBox.Show(text);
需要注意,查询串都是键值形式,且都是字符串类型。但对应的WebApi可以是兼容的数据类型。比如GetString(string, int)就直接把count数据转换为int。
4、POST上传数据的测试代码如下是通过查询串和POST方法上传一个字符串的代码:
string addr = "http://localhost/sfsj/api/TestApi/UploadString";WebClient webClient = new WebClient();webClient.Headers["ContentType"] = "text/plain";webClient.Encoding = Encoding.UTF8;webClient.QueryString["loginId"] = "客户";webClient.QueryString["count"] = "100";string text = webClient.UploadString(addr, "POST", "中国长城");MessageBox.Show(text);需要指出,POST方法时,仍然可以使用查询串上传数据项,同时可以单独上传一个数据项。由于单独上传的数据项可能较大(比如文件等),因此一般使用HTTP的POST方法。
编程运行环境:Visual Studio Commnunity 2017、.NET 4.5、Windows10(自带的IIS)。
阅读全文
0 0
- 一个使用WebClient和WebApi上传下载数据的方法
- WebClient 类的使用和下载文件
- 使用WebClient或HttpWebRequest模拟上传文件和数据
- 使用WebClient或HttpWebRequest模拟上传文件和数据
- 使用WebClient或HttpWebRequest模拟上传文件和数据
- 使用WebClient或HttpWebRequest模拟上传文件和数据
- webapi不使用MultipartFormDataStreamProvider上传multipart form-data数据的方法
- WebClient类的使用
- WebClient的使用问题
- 使用WebClient.UploadData post数据
- ASP.NET上传下载文件示例,使用webClient实现
- ASP.NET上传下载文件示例,使用webClient实现
- webclient、ftpclient上传下载
- WebClient类的DownloadString方法的缺陷,使用downloaddata更好
- C#下的WebClient保存session和cookie的方法
- C#下的WebClient保存session和cookie的方法
- 调用webapi的方法
- WebClient类的下载方法
- mysql索引的简单使用
- linux关于getch()与getche()的问题
- 给画布设置大小
- Java学习入门笔记,第一篇
- 信号学习心得
- 一个使用WebClient和WebApi上传下载数据的方法
- 设计模式之模板方法模式
- Ehcache 配置及注释
- Maven中父工程的搭建
- 浏览器跨域问题解决方案汇总
- linux系统常用的shell命令
- apio 2016 T1
- 如何直接把table转换成Excel导出
- 简单工厂模式