一个使用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)。



原创粉丝点击