Gre*_*uff 2 c# .net-core .net-core-2.1
工具类
情境
我正在尝试使用dotnet核心框架创建控制台应用程序。控制台应用程序需要发出API请求。
我已经阅读了有关IHttpClientFactory作为dotnet core 2.1一部分发布的新内容的信息。
该官员documenation表明,所有我需要添加到我的项目是对一个参考Microsoft.Extensions.HttpNuGet包。我已经做到了
问题
我已将添加IHttpClientFactory到类中,但Visual Studio仅选择System.Net.Http名称空间作为建议的参考:
题
我做错了什么:S
的Microsoft.Extensions.Http,这是默认包含在Microsoft.AspNetCore.App 包,包含大量的包,其通常用于HTTP相关代码,它包括System.Net包例如。
当您使用 的嵌套包中的某些内容时Microsoft.Extensions.Http,您仍然需要通过using 语句来引用它们。
所以,这里没有错。只需在using System.Net.Http;您的班级中添加一个。
The official documenation suggests that all I need to add to my project is a reference to the Microsoft.Extensions.Http NuGet package. I've done this.
是的,但是为了使事情变得更简单,您必须添加 Microsoft.Extensions.DependencyInjection为NuGet包,实际上,您可以将所有创建的httpClient实例委托给,HttpClientBuilderExtensions其中添加了很多扩展方法来创建named or typedHTTPClient,我在此处编写了一个示例为了你
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
namespace TypedHttpClientConsoleApplication
{
class Program
{
public static void Main(string[] args) => Run().GetAwaiter().GetResult();
public static async Task Run()
{
var serviceCollection = new ServiceCollection();
Configure(serviceCollection);
var services = serviceCollection.BuildServiceProvider();
Console.WriteLine("Creating a client...");
var github = services.GetRequiredService<GitHubClient>();
Console.WriteLine("Sending a request...");
var response = await github.GetJson();
var data = await response.Content.ReadAsStringAsync();
Console.WriteLine("Response data:");
Console.WriteLine((object)data);
Console.WriteLine("Press the ANY key to exit...");
Console.ReadKey();
}
public static void Configure(IServiceCollection services)
{
services.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json"); // GitHub API versioning
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample"); // GitHub requires a user-agent
})
.AddTypedClient<GitHubClient>();
}
private class GitHubClient
{
public GitHubClient(HttpClient httpClient)
{
HttpClient = httpClient;
}
public HttpClient HttpClient { get; }
// Gets the list of services on github.
public async Task<HttpResponseMessage> GetJson()
{
var request = new HttpRequestMessage(HttpMethod.Get, "/");
var response = await HttpClient.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
return response;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助