通过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());
            }

        }
复制代码
转:http://www.cnblogs.com/lori/p/4045633.html
### 回答1: HttpClient是一个强大的基于HTTP协议的客户端编程工具,用于提供交互性的Web应用程序。而HttpClient参数格式指的是在使用HttpClient进行网络请求时,需使用的参数格式标准,也是HTTP请求信息中实体部分的内容。 HttpClient参数格式通常采用的是JSON或者XML格式,JSON格式常用于数据输场景,XML格式则主要用于文本输场景。对于输的参数内容而言,Json格式可以在对象层级之间进行深度嵌套,不同的数据结构很方便地组合在一起,可以灵活处理各种数据类型;而XML格式则使用XML标签进行标记化,易于理解和扩展,同时支持多种编码方式。 在使用HttpClient时,需要将请求参数按照其格式进行编码,以方便后输和处理。在编写代码时,HttpClient提供了自带的参数格式化方法,开发人员可以方便地调用这些方法,快速编写出高效稳定的网络请求代码。 总之,HttpClient参数格式是指在使用HttpClient进行网络请求时,需要按照格式标准对输的参数内容进行编码,以方便后输和处理,在实际的开发中,开发人员还需根据具体业务需求和数据类型,选择适合的格式进行编码。 ### 回答2: HttpClient是一个Java HTTP客户端库,用于发送HTTP请求和处理响应。它提供了强大的API和自定义配置选项来满足各种HTTP客户端需求。 HttpClient使用NameValuePair作为请求参数格式。NameValuePair是一组键值对,由NameValuePair类型的对象组成。每个NameValuePair对象代表一个参数,其中“name”是参数的名称,“value”是参数的值。可以使用List<NameValuePair>或NameValuePair数组来传递请求参数。 例如,一个简单的HTTP POST请求可以像这样使用HttpClient: List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username", "my_username")); params.add(new BasicNameValuePair("password", "my_password")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8"); HttpPost post = new HttpPost("http://example.com/login"); post.setEntity(entity); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(post); 在上面的示例中,我们创建了一个带有两个参数(用户名和密码)的POST请求。我们使用UrlEncodedFormEntity参数编码为HTTP表单格式并将其设置为请求实体。然后,我们创建一个HttpPost实例并使用其setEntity方法将请求实体设置为POST请求的实体。最后,我们使用DefaultHttpClient执行POST请求,并获取HttpResponse对象以获取响应。 总之,HttpClient使用NameValuePair作为请求参数格式,NameValuePair是由名称和值组成的键值对,通过List<NameValuePair>或NameValuePair数组传递。它提供了强大的API和自定义配置选项来满足各种HTTP客户端需求。 ### 回答3: HttpClient参数格式主要有三种:Query Parameter、 Path Parameter 和 Body Parameter。 Query Parameter 是在 URL 中通过 ?key=value 的形式,将键值对作为查询字符串传递给服务器。这种形式通常用于 GET 请求。 Path Parameter 通常用于 RESTful API,作为请求路径的一部分。例如 /api/users/{id},其中 {id} 就是一个 Path Parameter,表示要查询的用户的 ID。 Body Parameter 是将参数放在请求体中向服务器发送数据。在请求头中需要设置 Content-Type 为 application/json 或 application/x-www-form-urlencoded,然后将参数JSON 或 URL 编码的形式放在请求体中。 以上三种参数格式可以根据实际需求灵活使用,在开发和使用 HttpClient 时需要注意格式的正确性和请求头的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值