首页 > 其他分享 >简单封装 Flurl

简单封装 Flurl

时间:2024-03-02 23:25:01浏览次数:15  
标签:封装 string public Flurl ex 简单 new Call response

FlurlHttpClient类

public class FlurlHttpClient
{
    private readonly FlurlClient client;

    public FlurlHttpClient(FlurlClient client)
    {
        this.client = client;
        client.WithHeader("hteder", "hhhhh");//请求头
    }

    public async Task<T> GetAsync<T>(string url) where T : class
    {
        try
        {
            return await client.Request(url).GetJsonAsync<T>();
        }
        catch (FlurlHttpException ex)
        {
            string method = ex.Call.HttpRequestMessage.Method.Method; // 获取请求方式
            IFlurlResponse? response = ex.Call.Response;
            int? statusCode = response is null ? null : response.StatusCode;//服务器状态码
            string errorMsg = $"服务器状态码:{statusCode};Url:{ex.Call.Request.Url};请求方式:{method},入参:无;message:{ex.Message}";
            throw new Exception(errorMsg);
        }
    }
   
    /// <summary>
    /// Get请求
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="url">url</param>
    /// <param name="values">参数以对象的形式传入</param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public async Task<T> GetAsync<T>(string url, object values)
    {
        try
        {
            return await client.Request(url).SetQueryParams(values).GetJsonAsync<T>();
        }
        catch (FlurlHttpException ex)
        {
            string method = ex.Call.HttpRequestMessage.Method.Method; // 获取请求方式
            IFlurlResponse? response = ex.Call.Response;
            string? statusCode = response is null ? null : response.StatusCode.ToString();//服务器状态码
            string errorMsg = $"服务器状态码:{statusCode ?? "无"};Url:{ex.Call.Request.Url};请求方式:{method};入参:{values};message:{ex.Message}";
            throw new Exception(errorMsg);
        }
    }


    /// <summary>
    /// Post请求
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="url">url</param>
    /// <param name="values">参数以对象的形式传入</param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public async Task<T> PostAsync<T>(string url,object values)
    {
        try
        {
            //.ReceiveJson<T>()方法来指定响应的JSON数据会被反序列化为类型T
            return await client.Request(url).PostJsonAsync(values).ReceiveJson<T>();
        }
        catch (FlurlHttpException ex)
        {
            string method = ex.Call.HttpRequestMessage.Method.Method; // 获取请求方式
            IFlurlResponse? response = ex.Call.Response;
            int? statusCode = response is null ? null : response.StatusCode;//服务器状态码
            string errorMsg = $"服务器状态码:{statusCode};Url:{ex.Call.Request.Url};请求方式:{method};入参:{values};message:{ex.Message}";
            throw new Exception(errorMsg);
        }

    }
}

注入FlurlHttpClient类

/// <summary>
/// 初始化flurlhttpclient
/// </summary>
/// <param name="builder"></param>
public static void InitFlurlHttpClient(this WebApplicationBuilder builder)
{
    var baseUrl = builder.Configuration["wmsBaseUrl"];
    if (string.IsNullOrEmpty(baseUrl)) throw new Exception("baseUrl未配置");

    //WithHeader添加请求头
    builder.Services.AddScoped(provider => new FlurlClient(baseUrl).WithHeader("test","111"));

    builder.Services.AddScoped(provider => {
        var flurlClient = provider.GetService<FlurlClient>(); // 从依赖注入容器中获取 FlurlClient 类型
        if (flurlClient is null) throw new Exception("系统错误flurlClient类还未注入");
        return new FlurlHttpClient(flurlClient);
    });
}

使用

[HttpGet]
public async Task<ActionResult<ApiResponse>> Get()
{
    var resAsync = httpClient.GetAsync<object>("TakeNumber/GetNumber", new { boxNumber = "123456" });
    return this.Success(resAsync);
}
[HttpPost]
public async Task<ActionResult<ApiResponse>> Post()
{
    var resAsync = httpClient.PostAsync<object>("TakeNumber/GetNumber", new { boxNumber = "123456" });
    return this.Success(resAsync);
}

标签:封装,string,public,Flurl,ex,简单,new,Call,response
From: https://www.cnblogs.com/cyfj/p/18049436

相关文章

  • Ubuntu22.04简单美化
    Ubuntu美化环境Ubuntu版本:Ubuntu22.04.4LTSGnome版本:42.9开始更新镜像源sudoapt-getupdate安装工具安装应用程序:tweaks(优化),扩展程序sudoapt-getinstallgnome-tweakssudoapt-getinstallgnome-shell-extensions安装浏览器扩展gnome-shell-integration......
  • dremio jobprofile查询简单说明
    dremio提供了方便的jobprofile能力,可以进行共享以及分析dremio查询的性能问题,以下是关于jobprofile下载功能的简单说明下载处理SupportResource.java@POST@Path("download")@Consumes(MediaType.APPLICATION_JSON)publicResponsedownloadData(......
  • vue3+vite,封装 echarts 组件以及如何使用
    1.封装echarts组件1.安装echarts所需npm包,如下。[email protected]@3.1.0//社区图等npmi@vueuse/[email protected]//一些好用的hook2.封装echarts组件1.在component目录下新建Echarts文件夹2.在Echarts文件夹下新建config文件夹(......
  • Dos的一些简单命令
    首先要知道如何打开CMD打开CMD的方式1.开始+系统+命令提示符2.Win键+R输入cmd打开控制台(推荐使用)3.在任意的文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口4.资源管理器的地址栏前面加上cmd路径常用Dos命令#盘符查看D:#查看当前目录下的所有文件......
  • 简单dp 学习笔记
    1.背包1.1背包模型的概述有\(n\)种物品,每种物品有若干个。拿一件物品付出\(w_i\)代价获得\(v_i\)价值,问最多花费\(V\)的代价能获得的最大价值。1.20/1背包考虑每种物品只有一个的情况。我们设\(f_{i,j}\)表示前\(i\)个物品,花费了\(j\)的最大价值。于是得出......
  • MDS300-16-ASEMI整流模块MDS300-16参数、封装、尺寸
    编辑:llMDS300-16-ASEMI整流模块MDS300-16参数、封装、尺寸型号:MDS300-16品牌:ASEMI封装:M25最大重复峰值反向电压:1600V最大正向平均整流电流(Vdss):300A功率(Pd):大功率芯片个数:6引脚数量:5类型:模块、大功率正向浪涌电流:500A正向电压:1.35V最大输出电压(RMS):封装尺寸:如图工......
  • 简单实现new关键字,及为什么当result为对象则返回这个对象?
    下面是一个简单的JavaScript代码示例,演示了如何手动实现new关键字的功能:functionmyNew(constructor,...args){//创建一个新对象,该对象继承自构造函数的原型varinstance=Object.create(constructor.prototype);//在新对象上调用构造函数,并传入参数var......
  • 14.分布式事件总线MassTransit的简单使用
    简介:    MassTransit,直译公共交通,是由ChrisPatterson开发的基于消息驱动的.NET分布式应用框架,其核心思想是借助消息来实现服务之间的松耦合异步通信,进而确保应用更高的可用性、可靠性和可扩展性。通过对消息模型的高度抽象,以及对主流的消息代理(包括RabbitMQ、Active......
  • 有哪些手机与电脑可以同步的简单好用笔记软件?
    在我的日常工作、学习和生活中,笔记软件是我不可或缺的助手。无论是会议要点的记录、学习笔记的整理、还是日常生活的备忘录,一款好用笔记软件都能让这些信息井然有序,随时可查。特别是在忙碌的工作日,能够在电脑上整理工作笔记,然后在外出时通过手机随时查看和补充,这种跨设备的便捷性......
  • 万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
    万字长文学会对接AI模型:SemanticKernel和KernelMemory,工良出品,超简单的教程目录万字长文学会对接AI模型:SemanticKernel和KernelMemory,工良出品,超简单的教程配置环境部署one-api配置项目环境模型划分和应用场景聊天提示词引导AI回复指定AI回复特定格式模板化提示......