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请求并且参数于具体实体类型,如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
缓存 安全 Java
《深入理解Spring》过滤器(Filter)——Web请求的第一道防线
Servlet过滤器是Java Web核心组件,可在请求进入容器时进行预处理与响应后处理,适用于日志、认证、安全、跨域等全局性功能,具有比Spring拦截器更早的执行时机和更广的覆盖范围。
|
8月前
|
JSON 测试技术 API
API调用类型全面指南:理解基础知识
在数字化时代,API(应用程序编程接口)是连接不同软件应用的核心技术。掌握API调用类型对于开发高效、可扩展的系统至关重要。本文详细解析了GET、POST、PUT、DELETE等常见API请求方法,以及GraphQL、WebSocket等高级技术的应用场景。同时,介绍了APIPost这一强大工具如何优化API开发与测试流程。通过理解HTTP状态码、数据格式及请求头部信息,开发者能更好地设计和管理API,实现无缝跨平台通信。无论是数据获取、更新还是实时交互,合理选择API调用类型均可提升开发效率与用户体验。
|
监控 搜索推荐 数据挖掘
淘宝 API 接口的调用频率限制是否会因应用类型而异?
淘宝API调用频率限制依应用类型而异。电商管理类如商家后台、商品批量上传工具,调用频次较高;数据分析类如市场调研、店铺分析工具,频次较严;导购推荐类如第三方导购平台、社交媒体导购应用,依据规模与信誉设定;其他如开发者测试、个人小型应用则限制较宽松。
|
9月前
|
XML 网络协议 API
从cURL到GraphQL:不同API类型概述
本文概述了不同API类型及其应用,帮助开发人员选择合适的工具。cURL是强大的命令行工具,适用于调试和自动化;RESTful API基于HTTP方法,适合Web服务和微服务架构;SOAP用于企业级应用,提供高安全性;GraphQL通过精确查询减少数据传输;WebSocket支持实时通信,适用于低延迟场景。了解这些API的特点和优势,有助于构建高效、可扩展的应用程序。
|
11月前
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
514 23
|
存储 开发框架 .NET
.NET 8 实现无实体库表 API 部署服务
【10月更文挑战第12天】在.NET 8中,可通过以下步骤实现无实体库表的API部署:首先安装.NET 8 SDK及开发工具,并选用轻量级Web API框架如ASP.NET Core;接着创建新项目并设计API,利用内存数据结构模拟数据存储;最后配置项目设置并进行测试与部署。此方法适用于小型项目或临时解决方案,但对于大规模应用仍需考虑持久化存储以确保数据可靠性与可扩展性。
147 3
|
API C#
异步轮询 Web API 的实现与 C# 示例
异步轮询 Web API 的实现与 C# 示例
360 1
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
151 1

热门文章

最新文章