首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在.net Core3.1中的依赖注入设置之外将证书添加到IHttpClientFactory httpclient?

在.NET Core 3.1中,可以通过以下步骤将证书添加到IHttpClientFactory的HttpClient中,以实现依赖注入设置之外的配置:

  1. 首先,将证书文件(.pfx或.pem格式)添加到项目中,并确保其已嵌入到程序集中。
  2. 在Startup.cs文件中的ConfigureServices方法中,注册IHttpClientFactory服务,并配置HttpClient的Handler以添加证书。示例代码如下:
代码语言:txt
复制
using System.Net.Http;
using System.Security.Cryptography.X509Certificates;

public void ConfigureServices(IServiceCollection services)
{
    // 注册IHttpClientFactory服务
    services.AddHttpClient();

    // 获取证书文件的字节数组
    byte[] certBytes = GetCertificateBytes();

    // 创建X509证书对象
    X509Certificate2 certificate = new X509Certificate2(certBytes, "certificate_password");

    // 创建HttpClientHandler并添加证书
    HttpClientHandler handler = new HttpClientHandler();
    handler.ClientCertificates.Add(certificate);

    // 配置HttpClient的Handler
    services.Configure<HttpClientFactoryOptions>(options =>
    {
        options.HttpClientActions.Add(client =>
        {
            client.DefaultRequestHeaders.Add("User-Agent", "Your User Agent");
            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            client.Timeout = TimeSpan.FromSeconds(30);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Bearer Token");
            client.DefaultRequestHeaders.Add("Custom-Header", "Your Custom Header Value");
            client.BaseAddress = new Uri("https://api.example.com");
            client.DefaultRequestHeaders.Host = "api.example.com";
            client.DefaultRequestHeaders.ConnectionClose = false;
            client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");

            // 添加自定义的HttpClientHandler
            client.HttpMessageHandler = handler;
        });
    });
}

在上述代码中,我们通过services.AddHttpClient()方法注册了IHttpClientFactory服务。然后,我们获取证书文件的字节数组,并使用密码创建X509证书对象。接下来,我们创建了一个自定义的HttpClientHandler,并将证书添加到其中。最后,通过services.Configure<HttpClientFactoryOptions>方法配置了HttpClient的Handler。

请注意,上述示例中的代码片段是为了演示目的而重复添加了多个请求头。您可以根据自己的需求进行适当的修改。

这样,您就可以在.NET Core 3.1中的依赖注入设置之外将证书添加到IHttpClientFactory的HttpClient中了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core 6框架揭秘实例演示:利用IHttpClientFactory工厂来创建HttpClient

在一个采用依赖注入框架应用,我们一般不太推荐利用手工创建HttpClient对象来进行HTTP调用,使用HttpClient对象最好利用注入IHttpClientFactory工厂来创建。...为了解决这个问题,我们对提供设置赋予一个唯一名称,在使用时候针对这个标识提取对应设置来创建HttpClient对象,为了方便描述,我们这个唯一标识HttpClient设置名称就称为HttpClient...代码片段所示,我们直接在其构造函数中注入HttpClient对象,并在GetStringAsync方法中使用它来完成最终HTTP调用。...在添加了这个包引用之后,我们演示程序做了如下修改。代码片段所示,我们注册终结点接收到每三个请求只有一个会返回状态码为200响应,其余两个响应码均为500。...在利用代表依赖注入容器IServiceProvider对象得到IHttpClientFactory之后,我们在一个无限循环中利用它创建HttpClient对本地承载API发起调用,虽然服务端每三次调用只有一次是成功

79720

.net core HttpClient 使用之消息管道解析(二)

一、前言 前面分享了 .net core HttpClient 使用之掉坑解析(一),今天来分享自定义消息处理HttpMessageHandler和PrimaryHttpMessageHandler 使用场景和区别...二、源代码阅读 2.1 核心消息管道模型图 先贴上一张核心MessageHandler 管道模型流程图,图如下: HttpClient HttpMessageHandler 负责主要核心业务...,HttpMessageHandler 是由MessageHandler 链表结构组成,形成一个消息管道模式;具体我们一起来看看源代码 2.2 Demo代码演示 再阅读源代码时候我们先来看下下面注入HttpClient...Log 如下图: 看到输出结果,大家有没有发现跟Asp.net core 中间件管道运行图一样。...使用场景:我们可以通过自定义MessageHandler 来动态加载请求证书,通过数据库一些信息,在自定义Handler 中加载注入对应证书,这样可以起到动态加载支付证书作用,同时可以SendAsync

63510

.NetCore 2.1以后HttpClient最佳实践

ASP.NET Core 2.1出现一个新HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到一些常见问题。...以这种方式使用单个HttpClient保持连接打开并且不遵守DNS生存时间(TTL)设置(总之就是同一个HttpClient实例只能有一个请求头,在被请求方发生更改时,由于是单例不能做个性化改变,否则导致其他请求失败...有一个后台作业检查过期池,以查看处理程序所有引用是否已在scope之外,此时可以将其释放掉。处理程序链过期后对新客户端任何新请求都将获得新处理程序链。...依赖,它将由DI系统注入ClassInService。...但此处创建httpclient是在他所管理池子,并不每个请求都会是新socket。

1K20

Asp.Net CoreHttpClient使用方式

在.Net Core应用开发,调用第三方接口也是常有的事情,HttpClient使用人数、使用频率算是最高一种了,在.Net CoreHttpClient使用方式随着版本升级也发生了一些变化...,本次就讲解一下Asp.Net Core2.1前后使用两种方式。...Dispose()方法HttpClient释放了,但是tcp连接仍然处于保持状态,在240s后才会自动断开,这里就涉及到一个连接状态了,首先得理解下http工作原理,http协议是建立在tcp协议基础之上...使用单例模式,只生成一个HttpClient private static HttpClient _httpClient = null; public HttpClient CreateHttpClient...//在startup完成单例注入 services.AddSingleton(); public interface IHttpClient

1.2K20

四种为HttpClient添加默认请求报头解决方案

HttpClient在Web调用具有广泛应用,而为它添加默认请求头是我们经常遇到需求,本文介绍4种为HttpClient添加默认请求头方式。...第一种方式 直接在创建HttpClient对象DefaultRequestHeaders集合添加报头。...对于.NET Core应用来说,我们更推荐做法是采用依赖注入方式,利用IHttpClientFactory来创建HttpClient对象,那么我们在进行相关服务注册时候就可以设置默认请求报头。...= services .BuildServiceProvider() .GetRequiredService()...("x-www-baz", "789"); } } 第三种方式 由于HttpClient在发送请求时候会利用DiagnosticSource对象发送相应诊断事件,并且将作为请求HttpRequestMessage

88630

Blazor学习之旅 (14) Blazor WebAssembly

应用程序二进制输出,即 DLL 文件,传输到浏览器,并运行经过优化以使用 WebAssembly 运行时 .NET 版本,无需考虑浏览到该网站设备基础操作系统。...选择".NET 6框架",“身份验证类型”设置为“无”,取消“ASP.NET Core托管”复选框,然后点击创建。...使用HttpClient获取数据 在创建Blazor WebAssembly项目中,自带模板已经给我们演示了一个 FeatchData.razor页,它演示是我们如何在SPA这种前后端分离项目中,...首先,在Program.cs已经帮我们注入一个HttpClient,它指向是本项目的地址。...NOTE:在实际开发,我们通常注入HttpClientFactory实例,然后通过HttpClientFactory来创建HttpClient实例。

31710

在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入

作者:依乐祝 原文地址: 在本教程系列,我向您展示如何使用.NET驱动程序提供CRUD函数在.NET应用程序中使用MongoDB。MongoDB驱动允许您使用来自不同编程语言MongoDB。...MongoDB.Driver.Core:--它本身就是一个驱动程序,具有驱动程序核心组件(如何连接到mongod实例,连接池),用于从.net到MongoDB通信,并且它依赖于MongoDB.Bson...文档存储在集合,如果你对SQL比较熟悉的话,可以集合视为表,文档视为表记录。...获取一个集合 在讨论了创建集合之后,还需要一个额外步骤来检查集合是否存在,创建它,然后文档添加到集合。如果集合不存在,GetCollection会自动创建一个集合,并将文档添加到该集合。...这包包含了所有基本BSON类型和其他一些用于使用BSON方法。 在这个包,我们有表示BSON类型类,以及如何在.NET类型和BsonValue之间映射。

2.8K30

如何实现Http请求报头自动转发

ASP.NET Core应用WebApp1在通过HttpClient调用WebApp2时,我们组件会自动实现这对这两个请求报头转发。 ? 如下所示是作为下游应用WebApp2定义。...代码片段所示,为了验证指定跟踪报头是否在WebApp1被我们组件成功转发,我们接收到所有请求报头拼接成一个字符串作为响应内容。...上面我们演示了HeaderForwarder组件自动提取指定报头并自动转发功能,实际上该组件还可以帮助我们任意报头添加到HttpClient发出请求消息。...假设WebApp1除了自动转发foo和bar报头之外,还需要额外添加一个baz报头,我们可以对程序作如下修改。...ASP.NET Core应用,HeaderForwarder是通过调用IHostBuilder扩展方法UseHeaderForwarder进行注册,如果在控制台应用又该如何使用。

1.1K30

如何自动转发接收请求报头?

其实我们应用也可能会使用到分布式跟踪这种类似的功能,我们需要在某个应用添加一些“埋点”,当它调用另一个应用时,这些埋点会自动添加到请求报头集合,从而实现在整个调用链自动传递。...三个应用,ASP.NET Core应用App2和App3以路由形式提供一个简单API,App1则是一个简单控制台应用。...后面调用AddHttpClient扩展方法是为了使用注入IHttpClientFactory对象所需HttpClient对象。...路由处理程序会再控制台上输出接收到所有请求报头,并在此之后利用IHttpClientFactory对象创建HttpClient完成针对App3调用。...如果App2在调用App3时候并不希望报头转发出去,可以按照如下方式注入IOutgoingHeaderProcessor对象,并调用其SuppressHeaderForwarder方法报头自动转发功能屏蔽掉

28830

.net core学习笔记,组件篇:服务注册与发现(Consul)初篇

在这里我举一个生活中非常普遍例子——网购来简单说明,网购在我们日常生活已经是非常普遍了,其实网购(商家—菜鸟驿站—买家),就组成了一个非常简单注册发现逻辑。...在我们购买商品之后,需要拿到这件商品,如果是普通点对点服务,商家直接商品快递给买家,如果买家临时有事不在家,这个时候将会收货失败。...使用类似DNS或者HTTP,应用程序和可以很轻松发现他们依赖服务。...5、如何在asp.net core中使用Consul 概念性内容已经讲差不多了,下面我们来看看如何在asp.net core+windows下使用Consul。...ConfigureService方法中注入上面的服务接口与类,具体为什么要注入应该不用我多说了。

67720

ASP.NET Core 使用HttpClientFactory Polly实现熔断降级

前言 在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新一部分.虽然说HttpClient这个实现了disposable,但使用它时候用using包装块方式通常不是最好选择...需要不同基地址,不同HTTP 标头和其他对请求个性化操作场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新HTTPClientFactory...用ASP.Net团队的话说:“an opinionated factory for creating HttpClient instances”(一个用于创建HttpClient实例最佳实践工厂)...您将HTTP 客户端注册到工厂,并且可以使用Polly处理程序Polly策略用于Retry,CircuitBreakers 等。...,HTTP 5XX 状态码,HTTP 408 状态码 以及System.Net.Http.HttpRequestException异常 }).AddTransientHttpErrorPolicy

1.1K20

ASP.NET Core WebApi项目架构分层开发实战演练

构建一个优秀API依赖于伟大框架,今天我们主角当然是微软跨平台轻量级HTTP服务框架——Asp.net Core WebApi。...★ 客户端(C/S,B/S)如何调用ASP.NET Core WebApi服务接口 ★ 如何在Docker容器运行ASP.NET Core应用 1.2、正确学习课程方式须知 1)、视频+实例源代码配套学习...(备注:本课程不是完完全全零基础教学,课程侧重是实战演练,因此需要大家结合自身实际情况进行选择学习) 3)、在学习过程,我们少一点抱怨,多一份收获。...最佳实践 五、HttpClient在.NET应用 六、HttpClient在.NET Core应用 七、在 ASP.NET Core中使用IHttpClientFactory 八、在C/S客户端中使用...IHttpClientFactory 九、HttpClient扩展Polly支持

3.5K30

asp.net core 使用HttpClientFactory Polly实现熔断降级

前言 在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新一部分.虽然说HttpClient这个实现了disposable,但使用它时候用using包装块方式通常不是最好选择...需要不同基地址,不同HTTP 标头和其他对请求个性化操作场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新HTTPClientFactory...用ASP.Net团队的话说:“an opinionated factory for creating HttpClient instances”(一个用于创建HttpClient实例最佳实践工厂)...您将HTTP 客户端注册到工厂,并且可以使用Polly处理程序Polly策略用于Retry,CircuitBreakers 等。...,HTTP 5XX 状态码,HTTP 408 状态码 以及System.Net.Http.HttpRequestException异常 }).AddTransientHttpErrorPolicy

87310

.NET SK 如何给AI大模型添加搜索引擎功能?

准备工作 创建一个名称为5_SK_Plugin_Web控制台项目 复制以下代码到5_SK_Plugin_Web项目文件 ...q={0}接口去获取我们需要信息,然后返回Html,使用正则表达式html中大部分不需要内容去掉。 然后我们在获取Html使用以下提示词进行内容精简。...,我们需要填写我们在https://api.token-ai.cn/创建令牌, 然后我们在kernelBuilderServices注册了我们HttpClient服务,以便插件依赖注入IHttpClientFactory...插件添加到kernel,这样我们就可以在kernel中使用我们插件了。...然后我们创建了一个OpenAIPromptExecutionSettings对象,这个对象是用来设置我们插件行为,这里我们设置了ToolCallBehavior为AutoInvokeKernelFunctions

7710

HttpClientFactory日志不好用,自己扩展一个?

HttpClientFactory以依赖注入方式集成到.NETCore 框架: HttpClientFactory典型用法 使用时从IHttpClientFactory工厂创建所需HttpClient...这样日志可以想象到有2个问题: ① 在高并发使用HttpClient,日志条数众多,没有类似TraceId 这样机制定位 某次HttpClient调用完整日志。...② 若是微服务/ 分布式调用,可能还有 本次HttpClient调用日志与后置api日志 结合分析需求, 这个日志也支持不了。...因此本文打算重新构建 HttpClientFactory日志:给某次请求全部日志设置TraceId 结合我给出典型用法来看IHttpClientFactory组件原理: ?...示例System.Net.Http.HttpClient.bce-request.LogicalHandler,System.Net.Http.HttpClient.bce-request.ClientHandler

1.4K10
领券