Инициализация HttpClient внутри класса c - PullRequest
0 голосов
/ 28 февраля 2020

Я учусь C#. Было бы правильно инициализировать HttpClient внутри такого класса c как этот?

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
};

1 Ответ

3 голосов
/ 28 февраля 2020

Да, вы можете добиться этого, выполнив следующее:

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

Что касается HttpClient как синглтона, то в целом это не лучшая практика (не оптимальное управление временем жизни соединения), но все зависит от того, как вы собираюсь использовать это. Было бы неразумно хранить HttpClient в памяти навсегда, если ваше приложение будет использовать его не очень часто. Лучше всего использовать именованный или набранный HttpClient или IHttpClientFactory. Очень информативная информация, которую вы можете найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...