• 【WebApi】通过HttpClient调用Web Api接口


    HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5。

    它支持所有的http方法,自动转向,https协议,代理服务器。

    一.Api接口参数标准化。

    GET方式,可以有多个重载,有多个参数

    POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递

    Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象。

    二.调用方

    我们看一下最基本网页中ajax请求(Get | Set)

    $.ajax({
                url: "http://localhost:xxx/api/register",
                type: "GET",
                success: function (data) {
                    console.log("json:" + data);
                }
            });
    $.ajax({
                url: "http://localhost:xxx/api/register",
                type: "Post",
    data: {'':''} success: function (data) { console.log("json:" + data); } });

    三.通过控制台实现Get&&Post请求

    //Get:
    static async void ClientGet()
    {
        string    url    = "http://localhost:xxx/api/register";
        var    handler = new HttpClientHandler()
        {
            AutomaticDecompression = DecompressionMethods.GZip
        };
        using ( var http = new HttpClient( handler ) )
        {
            var response = await http.GetAsync( url );
    
    
            response.EnsureSuccessStatusCode();
            await response.Content.ReadAsStringAsync();
        }
    }
    /*
     * / <summary>
     * / HttpClient实现Post请求
     * / </summary>
     */
    static async void dooPost()
    {
        string    url    = "http://localhost:52824/api/register";
        var    userId    = "1";
    /* 设置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>()
                                 {
                                     { "", userId } /* 键名必须为空 */
                                 } );
    
    /* await异步等待回应 */
    
            var response = await http.PostAsync( url, content );
    
    
    /* 确保HTTP成功状态值 */
            response.EnsureSuccessStatusCode();
    /* await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) */
            Console.WriteLine( await response.Content.ReadAsStringAsync() );
        }
    }

    无论是web,手机端,都是有自己的WebClient,都是一样的,语言也是,那如果说你的Api是一个的参数是一个对象类型的,这还是大同小异的,比如ajax的调用方式直接把data变成一个data对象,那我们C#的这个参数应该是个什么呢,这个时候我们应该用到FormUrlEncodedContent,使用这个类型去做httpcontext.

      var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
       {    {"Id","6"},
             {"Name","zara"},
             {"Info", "zzh"}
       });
    

     那最后呢也没有什么区别了,只不过在异步去请求的时候去更换PostAsync , GetAsync , PutAsync 。

  • 相关阅读:
    Linux服务下,设置开机自启动服务
    [知识分享] 实用且具有参考意义的博客网站
    [AutoHotKey] 自定义配置快捷键
    [driver] probe调用的时机
    [vscode] 常用快捷键
    [Linux] 双系统下linux自动挂载windows下的逻辑分区
    [Linux] manjaro中文输入法配置
    [Linux] gnome桌面顶栏透明效果
    [Linux] manjaro窗口按钮异常
    博客园简约主题设置
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/10026366.html
Copyright © 2020-2023  润新知