`
冷寒冰
  • 浏览: 252654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebApi+Post+实体参数

 
阅读更多

回到目录

上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象进行传递,而这讲主要围绕这个话题来说,接口层添加一个新类User_Info,用来进行数据传递,而客户端使用网页ajax和控制台HttpClient的方式分别进行实现,Follow me!

下面定义一个复杂类型对象

   public class User_Info
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Info { get; set; }
    }

下面修改上次的api部分,让它对这个对象进行操作

复制代码
    [CorsAttribute("http://localhost:3321")]
    public class RegisterController : ApiController
    {
        public static List<User_Info> Model = new List<User_Info>()
        {
            new User_Info{Id=1,Name="zzl",Info="zzl是楼主"},
            new User_Info{Id=2,Name="zhz",Info="zhz是zzl的儿子"},
            new User_Info{Id=3,Name="zql",Info="zql是zzl的妻子"},
            new User_Info{Id=4,Name="bobo",Info="bobo是zzl的朋友"}
        };

        // GET api/values
        public IEnumerable<User_Info> Get()
        {
            return Model;
        }
        // GET api/values/5
        public User_Info Get(int id)
        {
            var entity = Model.FirstOrDefault(i => i.Id == id);
            return entity;
        }
        // GET api/values/5?leval=1
        public HttpResponseMessage Get(int id, int leval)
        {
            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("<em style='color:red'>成功响应(id,level)</em>", System.Text.Encoding.UTF8, "text/html")
            };
        }
        // POST api/values
        public HttpResponseMessage Post([FromBody]User_Info value)
        {
            Model.Add(new User_Info
            {
                Id = value.Id,
                Info = value.Info,
                Name = value.Name,
            });
            //用户登陆相关
            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("添加数据成功,用户ID:" + value.Id, System.Text.Encoding.UTF8, "text/plain")
            };
        }
        // PUT api/values?userid=5
        public HttpResponseMessage Put(int userid, [FromBody]User_Info value)
        {
            var entity = Model.FirstOrDefault(i => i.Id == userid);
            entity.Info = value.Info;
            entity.Name = value.Name;
            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("修改数据成功,主键:" + userid + ",对象:" + value.Name)
            };
        }

        // DELETE api/values/5
        public HttpResponseMessage Delete(int id)
        {
            Model.Remove(Model.FirstOrDefault(i => i.Id == id));
            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("删除数据成功")
            };
        }
复制代码

而最关键的地方还是在各个客户端调用的时候,首先,你不能指望客户端去引用你的程序集,因为,不能平台无法实现这种引用(java & c#,js & C#,php & c#),所以,在调用时需要有它们各自的方法,而JS的ajax调用时,直接使用json对象即可,键名对象

实体的属性,在使用HttpClient时,直接为FormUrlEncodedContent对象赋一个键值对的集合即可,下面分别介绍一下

HTML的JS实现

复制代码
     $.ajax({
            url: "http://localhost:52824/api/register",
            type: "POST",
            data: { Id: 5, Name: '新来的', Info: '大家好' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value
            success: function (data) {
                console.log("post:" + data);
            }
        });

        $.ajax({
            url: "http://localhost:52824/api/register",
            type: "GET",
            success: function (data) {
                for (var i in data) {
                    console.log(data[i].Id + " " + data[i].Name);
                }
            }
        });
复制代码

结果截图

Console程序中使用HttpClient对象进行实现

复制代码
       /// <summary>
        /// HttpClient实现Post请求
        /// </summary>
        static async void dooPost()
        {
            string url = "http://localhost:52824/api/register";
             //设置HttpClientHandler的AutomaticDecompression
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            //创建HttpClient(注意传入HttpClientHandler)
            using (var http = new HttpClient(handler))
            {
                //使用FormUrlEncodedContent做HttpContent
                var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
                {    {"Id","6"},
                     {"Name","添加zzl"},
                     {"Info", "添加动作"}//键名必须为空
                 });

                //await异步等待回应

                var response = await http.PostAsync(url, content);
                //确保HTTP成功状态值
                response.EnsureSuccessStatusCode();
                //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }

        }
        /// <summary>
        /// HttpClient实现Get请求
        /// </summary>
        static async void dooGet()
        {
            string url = "http://localhost:52824/api/register?id=1";
            //创建HttpClient(注意传入HttpClientHandler)
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };

            using (var http = new HttpClient(handler))
            {
                //await异步等待回应
                var response = await http.GetAsync(url);
                //确保HTTP成功状态值
                response.EnsureSuccessStatusCode();

                //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }
        }
        /// <summary>
        /// HttpClient实现Put请求
        /// </summary>
        static async void dooPut()
        {
            var userId = 1;
            string url = "http://localhost:52824/api/register?userid=" + userId;

            //设置HttpClientHandler的AutomaticDecompression
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            //创建HttpClient(注意传入HttpClientHandler)
            using (var http = new HttpClient(handler))
            {
                //使用FormUrlEncodedContent做HttpContent
                var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
                {
                   {"Name","修改zzl"},
                   {"Info", "Put修改动作"}//键名必须为空
                });

                //await异步等待回应

                var response = await http.PutAsync(url, content);
                //确保HTTP成功状态值
                response.EnsureSuccessStatusCode();
                //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }

        }
复制代码
1
1
分享到:
评论

相关推荐

    ASP.NET Web API 接收文件上传

    ASP.NET Web API 是微软开发的一个用于构建RESTful服务的框架,它可以轻松地为Web应用程序、移动设备和桌面应用提供数据接口。在ASP.NET Web API中处理文件上传是常见的需求,特别是当你需要允许用户通过Web界面提交...

    angular.js+webapi Demo

    3. **模型绑定(Model Binding)**:WebAPI自动将请求参数绑定到操作方法的参数,支持JSON和XML格式的数据。 4. **过滤器(Filters)**:类似MVC中的过滤器,用于全局或特定操作的方法拦截,如异常处理、身份验证等...

    WebAPI接口设计经验总结[收集].pdf

    在 Web API 接口中,我们可能都会碰到很多简单类型的参数,但是又想让它们以 POST 方式提交数据。我们可以采用定义一个类来放置这些参数,或者采用动态的 JObject 参数。使用 JObject 可以避免定义多个实体类,例如...

    Web Api使用详解(全部实例讲解,可直接运行看效果)201902

    - 数据绑定:Web API自动将HTTP请求中的数据绑定到动作方法的参数。 5. 返回值与响应 - IHttpActionResult接口:提供了一种抽象的方式来构建响应,如OkResult、BadRequestResult等。 - HttpResponseMessage:...

    WebApiDemo

    WebApiDemo是一个典型的基于ASP.NET技术的Web API项目示例,用于展示如何构建RESTful服务。Web API是Microsoft为构建HTTP服务提供的一种框架,适用于构建跨平台、面向多种客户端(如浏览器、移动设备、桌面应用、...

    Web Api使用详解(全部实例讲解,可直接运行看效果),可直接运行

    安装NuGet包Microsoft.AspNet.WebApi.Core,用于包含Web API的核心组件。 3. **控制器(Controllers)** 在Web API中,控制器是处理HTTP请求的主要组件。它们继承自ApiController基类,负责处理传入的HTTP请求并...

    asp.net webapi例子 可自己扩展

    例如,如果你有一个自定义的实体类,WebAPI会尝试将请求的数据映射到这个实体上。同时,如果你在模型类上添加了数据验证特性,如`Required`,WebAPI会自动执行验证。 数据库操作通常通过Entity Framework或其他ORM...

    Asp.Net Web API 实例

    5. **模型绑定和验证**:Asp.Net Web API支持模型绑定,自动将请求数据(如JSON或FormUrlEncoded)映射到控制器方法的参数。同时,你可以利用`System.ComponentModel.DataAnnotations`命名空间中的特性进行数据验证...

    Python-Flask的可浏览WebAPI一个强大的FlaskRESTful框架

    **Python-Flask的可浏览WebAPI:一个强大的Flask RESTful框架** Flask是一个轻量级的Python Web开发框架,它以其灵活性和简洁性深受开发者喜爱。在Flask的基础上,为了实现更高效的RESTful API设计,我们可以使用...

    WebApi的增删改查全部实例增删改查全部实例

    WebApi通过模型绑定机制自动将HTTP请求中的数据映射到控制器方法的参数。例如,POST请求的JSON数据可以自动绑定到方法的复杂类型参数。 5. **数据访问层(DAL)** 在CRUD操作中,我们通常需要与数据库交互。这...

    金碟云二次开发-新手入门指南:Java快速搭建开发_测试环境(测试工程_SDK)k3cloud-webapi-sdk

    本指南将帮助新手快速入门,通过Java语言搭建开发和测试环境,使用金碟云提供的WEB API k3cloud-webapi-sdk.jar进行高效集成。 首先,我们需要了解金碟云的基本概念。金碟云是金碟公司推出的一款基于云计算的企业...

    FoodOrder:测试有关处理新食品订单的练习。 Asp.Net Core webapi +实体框架

    《使用Asp.Net Core WebAPI和实体框架处理食品订单的实践》 在现代Web开发中,Asp.Net Core WebAPI和实体框架(Entity Framework)是两个重要的工具,它们结合使用可以构建高效、灵活的后端服务,特别是对于处理像...

    C#进阶系列--WebApi

    C#进阶系列——WebApi 路由机制剖析:你准备好了吗? ................................................................................................... 3 一、MVC和WebApi路由机制比较 .......................

    WebAPI - 副本.zip

    本资料"WebAPI - 副本.zip"包含了完整的WebAPI开发流程,包括源代码文件,对于学习和理解WebAPI的开发具有很高的参考价值。 在C#中开发WebAPI时,主要涉及以下几个关键知识点: 1. **控制器(Controllers)**:Web...

    WebApi.rar

    C#进阶系列——WebApi 接口参数不再困惑:传参详解 阅读目录 一、get请求 1、基础类型参数 2、实体作为参数 3、数组作为参数 4、“怪异”的get请求 二、post请求 1、基础类型参数 2、实体作为参数 3、数组作为参数 4...

    Web Api使用详解(全部实例讲解,可直接运行看效果).rar

    7. **实体框架(Entity Framework)集成**:Web API可以与ORM框架如Entity Framework无缝集成,方便地操作数据库。 8. **版本控制**:Web API支持版本控制,允许在不中断旧API的情况下发布新版本,确保向后兼容。 ...

    Web-API接口设计经验总结.docx

    在定义 Web-API 接口时,我们需要确定是使用 GET 方式还是 POST 方式。通常情况下,我们使用 GET 方式来获取数据,使用 POST 方式来提交数据。在定义接口时,我们需要显式地声明接口是使用 GET 方式还是 POST 方式,...

Global site tag (gtag.js) - Google Analytics