WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型

简介:

本讲比较实际,在WEB端有一个Index和Create方法,用来从web api显示实体列表数据和向api插入实体对象,这就是以往的网站,只不过是把数据持久化过程放到了web pai上面,它的优势不用说,就是跨平台,跨语言,这其实是restFul的功功,一切通讯都变得那个简易,清晰!你再也不用引用程序集了...

先看一下实体的具体效果

我们看到如图,它们在取数据和插数据的时间,走的都是restful标准,都是通过web api实现的,当然,对于通讯来说,要求你的实体必须是可序列化的,这是正常的,而且对于EF来说,很容易办这事,只要修改T4模版就可以搞定。

看一下具体web api代码,采用unity实现的注入,后台BLL层使用了cache机制,可以实现EntLib和redis两种方式进行持久化,可以通过配置文件实现切换,对于数据持久化方式,实现了ef和redis的动态切换

Api代码

    /// <summary>
    /// 用户业务接口
    /// </summary>
    public class UserController : ApiController
    {
        IUserService userService;

        public UserController()
        {
            userService = ServiceLocator.Instance.GetService<IUserService>();
        }
        // GET api/user
        public IEnumerable<WebManageUsers> Get()
        {
            return userService.GetWebManageUsers(new PageParameters(1, 10));
        }

        // GET api/user/5
        public WebManageUsers Get(int id)
        {
            return userService.GetWebManageUser(i => i.ManageUserID == id);
        }

        // POST api/user
        public void Post([FromBody]WebManageUsers value)
        {
            userService.InsertManageUsers(value);
        }

        // PUT api/user/5
        public void Put(int id, [FromBody]WebManageUsers value)
        {
            var entity = userService.GetWebManageUser(i => i.ManageUserID == id);
            if (entity != null)
            {
                entity = value.MapTo<WebManageUsers>();
                userService.ModifyManageUsers(entity);
            }
        }

        // DELETE api/user/5
        public void Delete(int id)
        {
            userService.DeleteManageUsers(new WebManageUsers { ManageUserID = id });
        }
    }

Client端代码,使用HttpClient实现异步通讯

    public class HomeController : Controller
    {
        private HttpClient client = new HttpClient();
        private string url = "http://localhost:52824/api/user";
        private JsonMediaTypeFormatter formatter = System.Web.Http.GlobalConfiguration.Configuration.Formatters.Where(f =>
        {
            return f.SupportedMediaTypes.Any(v => v.MediaType.Equals("application/json", StringComparison.CurrentCultureIgnoreCase));
        }).FirstOrDefault() as JsonMediaTypeFormatter;

        public async Task<ActionResult> Index()
        {
            var data = await client.GetAsync(url);
            return View(data.Content.ReadAsAsync<IEnumerable<WebManageUsers>>());
        }

        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public async Task<ActionResult> Create(WebManageUsers entity)
        {
            entity.Password = string.Empty;
            entity.Status = 1;
            entity.CreateDate = DateTime.Now;
            entity.UpdateDate = DateTime.Now;
            entity.Description = string.Empty;
            entity.Operator = string.Empty;
            entity.RealName = string.Empty;
            entity.WebSystemID = 1;
            entity.DepartmentID = 1;
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            using (var http = new HttpClient(handler))
            {
                var response = await http.PostAsync<WebManageUsers>(url, entity, formatter);
                return RedirectToAction("Index");
            }
        }
    }

我们通过上面的例子可以看到,在client端与api进行通讯时,使用了实体类型,并没有进行JSON拼串,这是友好的,事实上,这个过程是.net为我们实现了,当然你要首先指定它的JSON持久化功能代码,如图

好了,对于基于实体的Web api通讯就说到这里了,感谢阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
安全 前端开发 物联网
现代 API 的类型划分
【2月更文挑战第28天】
|
1月前
|
存储 开发框架 JSON
在 Python 中,如何处理 Web 请求和响应?
【2月更文挑战第26天】【2月更文挑战第90篇】在 Python 中,如何处理 Web 请求和响应?
|
2月前
|
Prometheus 网络协议 JavaScript
api 网关 kong 数据库记录请求响应报文
Kong的tcp-log-with-body插件是一个高效的工具,它能够转发Kong处理的请求和响应。这个插件非常适用于需要详细记录API请求和响应信息的情景,尤其是在调试和排查问题时。
49 0
api 网关 kong 数据库记录请求响应报文
|
2月前
|
数据采集 监控 测试技术
如何为数据采集项目选择合适的API
摘要: 在数据采集项目中,选择合适的API对于实现高效、可靠的数据集成至关重要。本文为技术人员和技术经理提供了一个综合指南,以便评估和选择满足特定业务需求的API。 引言: 在数字化转型的浪潮中,企业依靠数据驱动决策变得越来越重要。有效的数据采集策略可以提供深入的洞见,并推动业务增长。API作为连接不同服务和数据的桥梁,在此过程中扮演着关键角色。
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
25天前
|
XML API 网络架构
API 常用的接口类型都有哪些?
在软件开发的宏大舞台上,接口充当着不可或缺的角色,确保了不同的软件模块能够高效、无缝地沟通和协作。
|
1月前
|
前端开发 API 数据处理
uni-app 封装api请求
uni-app 封装api请求
15 0
|
1月前
|
JSON Java API
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
23 1
|
1月前
|
NoSQL Java API
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
40 0
|
1月前
|
JSON 缓存 API
淘宝天猫获取sku详细信息 API 调用文档 及请求代码
淘宝天猫获取SKU详细信息的API调用通常涉及到商品信息的API接口。在淘宝开放平台或天猫开放平台上,你可以找到相关的API文档和调用示例。下面是一个简化的步骤和示例代码来展示如何调用这些API: