一个使用WebClient和WebApi上传下载数据的方法

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值