首页 > 解决方案 > 静态类中的 HttpClient 初始化

问题描述

我正在学习 C#。在这样的静态类中初始化 HttpClient 是否正确?

public static class Network {
    static string token = "";
    static string baseAddress = "";

    static readonly HttpClient httpClient = new HttpClient();

    static Network() {
        httpClient.BaseAddress = new Uri(Network.baseAddress);
        httpClient.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", Network.token);
    }
}

也可以在一行中进行初始化,例如

static readonly HttpClient httpClient = new HttpClient() {
    BaseAddress = new Uri(Network.baseAddress),
    DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Bearer", Network.token)  //this does not work
};

标签: c#httpclient

解决方案


是的,您可以通过这样做来实现:

static readonly HttpClient httpClient = new HttpClient
{
    BaseAddress = new Uri(Network.baseAddress),
    DefaultRequestHeaders =
    {
        Authorization =
            new AuthenticationHeaderValue("Bearer", Network.token)
    }
};

将 HttpClient 视为单例,这通常不是最佳实践(不是对连接寿命的最佳控制),但这完全取决于您将如何使用它。HttpClient如果您的应用程序不经常使用它,那么永远保留在内存中是不明智的。最佳做法是使用命名或键入HttpClient或使用IHttpClientFactory. 您可以在此处找到非常详细的信息


推荐阅读