博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ASP.Net WebAPI构建REST服务(五)——客户端
阅读量:7079 次
发布时间:2019-06-28

本文共 1708 字,大约阅读时间需要 5 分钟。

WebAPI是标准的Http协议,支持Http协议的客户端(如浏览器)都可以访问。但是,有的时候我们如果想在自己的程序中使用WebAPI时,此时就要实现自己的客户端了。我之前介绍过在.Net 4.5中新增的库,它对Http操作实现了非常好的封装。我们可以通过它实现Http访问,例如,我们对前文所示的API进行一次Post操作:

    // POST: api/Values

    public void Post(Product value)
    {
    }

首先对HttpClient进行一些初始化操作:

    var client = new HttpClient();

    client.BaseAddress = new Uri("http://localhost:1282/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

这里主要进行了两部操作:1. 定义了默认的基地址,减少后续的URL长度,2. 定义了默认的接受的数据类型为Json。

下一步就要开始对Product对象的内容编码,默认是xml或json,这里我选择相对简单的json:

    var product = new Product() { Id = 1, Name = "food" };

    var content = Newtonsoft.Json.JsonConvert.SerializeObject(product);
    var httpContent = new StringContent(content, Encoding.UTF8);
    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json") { CharSet = "utf-8" };
    await httpContent.LoadIntoBufferAsync();
    var rsp = await client.PostAsync("api/values", httpContent);

从上面的代码可以看出,由于WebAPI不像WCF那样能自动生成客户端代码,需要我们自己封装对象,上面光封装对象就用了四行代码,对于不熟悉HttpClientd 朋友来说还是比较容易出错的。因此微软提供了一系列扩展函数方便我们简化这一过程。

在NUGET中安装WebApi.Client库

    

这个库安装后会在引用中增加一个System.Net.Http.Formatting的程序集,它主要提供了一系列扩展函数(其实装这个库顺带也会把HttpClient和Json.Net一并岸上),现在上面的代码就可以简化如下了:

    var product = new Product() { Id = 1, Name = "food" };

    var rsp = await client.PostAsJsonAsync("api/values", product);

除了PostAsJsonAsync这个扩展函数外,还提供了PostAsXmlAsync这种以XML传输的方式。同样,Put也有PutAsJsonAsync和PutAsXmlAsync的扩展版本。对于Get,虽然也提供了扩展函数,但是使用的方式稍有不同:

    var rsp = await client.GetAsync("api/values/1");

    rsp.EnsureSuccessStatusCode();
    var product = await rsp.Content.ReadAsAsync<Product>();

对于Delete,却没有提供扩展函数,可能是官方认为Delete直接在URL中就传ID就够用了,没必要在Request中封装消息了吧。

限于篇幅,今天就介绍到这里了,更多内容的可以参看官方文档:

 

转载地址:http://vpdml.baihongyu.com/

你可能感兴趣的文章
java B2B2C 源码 Springcloud多租户电子商城系统-Consul整体架构 ...
查看>>
2017-11-27 对中文语法的编程语言的质疑与回应
查看>>
高瓴资本向好未来注入5亿美元股权投资
查看>>
无人零售技术解决商云拿科技获A+轮融资,英特尔投资领投 ...
查看>>
三篇文章了解TiDB技术内幕-说存储
查看>>
联想创投子公司国民认证,助力农行全面升级FIDO移动生物识别安全认证 ...
查看>>
技术:搭建私有云kodexplorer
查看>>
Java 面试之技术框架
查看>>
SSM-配置
查看>>
【WiFi】让你的电脑成为无线路由器
查看>>
SQL SERVER 数据库备份
查看>>
日志服务IPython/Jupyter扩展实战:下载数据为Excel文件 ...
查看>>
IBM推出首款独立量子计算机,进一步推动量子计算商业化 ...
查看>>
设置通过Maven创建的工程的JDK版本—一劳永逸
查看>>
蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器
查看>>
简单介绍我的开源小工具:SanicDB
查看>>
我做SAP CRM One Order redesign的一些心得体会
查看>>
Confluence 6 升级完成后的检查
查看>>
货拉拉完成D轮3亿美元融资,由高瓴资本、红杉资本领投
查看>>
第二十二章:动画(十)
查看>>