Dan*_*nyx 2 c# dotnet-httpclient .net-core httpclientfactory
我需要进行一系列 HTTP 调用以从第 3 方保管库获取数据库凭据,因为我需要运行此代码Program.cs,或者最晚Startup.cs在添加 DBContext 之前,我需要能够在不使用 DBContext 的情况下进行这些调用使用IHttpClientFactory,因为这需要依赖注入已经初始化。
以下代码在运行时调用时工作正常,但在步骤期间不起作用ConfigureAppConfiguration。
HttpClient client = _clientFactory.CreateClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{_configuration["CredentialsVault:vaultUrl"]}Auth/SignAppIn");
request.Headers.Add("Authorization", $"PS-Auth key={_apiKey}; runas={_runAsUser};");
var response = await client.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在不依赖依赖注入的情况下进行 HTTP 调用,或者延迟AddDbContext到依赖注入设置之后?
我尝试创建一个 HttpClient 实例,如下所示:
HttpClient client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用,根据这个问题,它不应该像这样实例化。
您不需要注入类型HttpClient或使用IHttpClientFactory. 建议解决某些历史问题,但不是强制性的。
如果您确实需要解决依赖关系和配置以调用远程资源(在配置构建期间或之前),或者您有一个需要实例化的类型化客户端,您可以启动一个新的ConfigurationBuilder(如果需要)和ServiceProvider.
var preConfiguration = new ConfigurationBuilder()
//... add your sources
.Build();
var collection = new ServiceCollection()
.AddHttpClient<...>(...)
...
var provider = collection.BuildServiceProvider();
var client = provider.GetService<SomeClient>();
client.YourCall();
//... normal configuration here
Run Code Online (Sandbox Code Playgroud)
如果需要,上述方法还使您能够灵活地将处理程序插入到请求链中。
但是,这可能不是您的问题。根据您的问题,您所需要做的就是使用标准进行相同的调用HttpClient,并以您已经调用它的方式进行调用。ConfigurationBuilder如果您需要解析配置,您可以再次启动 a 。
var preConfiguration = new ConfigurationBuilder()
//... add your sources
.Build();
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{preConfiguration["CredentialsVault:vaultUrl"]}Auth/SignAppIn");
request.Headers.Add("Authorization", $"PS-Auth key={_apiKey}; runas={_runAsUser};");
var response = await client.SendAsync(request);
//... normal configuration here
Run Code Online (Sandbox Code Playgroud)
有趣的事实
.net 6添加了ConfigurationManager来解决其中一些配置问题,因此它实现了IConfigurationBuilder和IConfigurationRoot,并且使您能够部分构建源和提供程序,以解决并再次添加到构建器。
这解决了需要以一致的方式解析和构建配置的用例。例如,您可以使用Manager解析配置、启动服务提供程序并解析依赖项以调用远程资源,然后向IConfigurationRoot.
| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |