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月前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
解释如何在 Python 中实现 Web 服务(RESTful API)。
25 0
|
2月前
|
IDE Java API
使用Java Web技术构建RESTful API的实践指南
使用Java Web技术构建RESTful API的实践指南
|
2月前
|
数据可视化 API 开发者
通俗易懂:一步步教你 Flask 项目自动生成 API 文档
Flasgger,作为一款强大的 Flask 扩展,自动从 Flask 应用中提取并生成 OpenAPI 规范文档,配备 SwaggerUI,为开发者提供了一条快捷通道,让 API 的文档编制和交互式测试变得简单易行。Flasgger 的设计原则是简化开发流程,通过与 Flask 框架的无缝整合,让开发者可以更专注于应用逻辑的构建。
|
3月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
37 3
|
2月前
|
数据采集 监控 测试技术
如何为数据采集项目选择合适的API
摘要: 在数据采集项目中,选择合适的API对于实现高效、可靠的数据集成至关重要。本文为技术人员和技术经理提供了一个综合指南,以便评估和选择满足特定业务需求的API。 引言: 在数字化转型的浪潮中,企业依靠数据驱动决策变得越来越重要。有效的数据采集策略可以提供深入的洞见,并推动业务增长。API作为连接不同服务和数据的桥梁,在此过程中扮演着关键角色。
|
1月前
|
JSON Java API
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
23 1
|
1月前
|
NoSQL Java API
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
37 0
|
1月前
|
XML JSON API
通过Flask框架创建灵活的、可扩展的Web Restful API服务
通过Flask框架创建灵活的、可扩展的Web Restful API服务
|
1月前
|
缓存 监控 API
Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架
Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架
57 0
|
1月前
|
JSON API 数据格式
构建高效Python Web应用:Flask框架与RESTful API设计实践
【2月更文挑战第17天】在现代Web开发中,轻量级框架与RESTful API设计成为了提升应用性能和可维护性的关键。本文将深入探讨如何使用Python的Flask框架来构建高效的Web服务,并通过具体实例分析RESTful API的设计原则及其实现过程。我们将从基本的应用架构出发,逐步介绍如何利用Flask的灵活性进行模块化开发,并结合请求处理、数据验证以及安全性考虑,打造出一个既符合标准又易于扩展的Web应用。
645 4