HttpClient Класс

Определение

Предоставляет класс для отправки HTTP-запросов и получения HTTP-ответов от ресурса, идентифицируемого по универсальному коду ресурса (URI).

public ref class HttpClient : System::Net::Http::HttpMessageInvoker
public class HttpClient : System.Net.Http.HttpMessageInvoker
type HttpClient = class
    inherit HttpMessageInvoker
Public Class HttpClient
Inherits HttpMessageInvoker
Наследование

Примеры

// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
static readonly HttpClient client = new HttpClient();

static async Task Main()
{
  // Call asynchronous network methods in a try/catch block to handle exceptions.
  try	
  {
     HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
     response.EnsureSuccessStatusCode();
     string responseBody = await response.Content.ReadAsStringAsync();
     // Above three lines can be replaced with new helper method below
     // string responseBody = await client.GetStringAsync(uri);

     Console.WriteLine(responseBody);
  }
  catch(HttpRequestException e)
  {
     Console.WriteLine("\nException Caught!");	
     Console.WriteLine("Message :{0} ",e.Message);
  }
}
' HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
Shared ReadOnly client As HttpClient = New HttpClient()

Private Shared Async Function Main() As Task
    ' Call asynchronous network methods in a try/catch block to handle exceptions.
    Try
        Dim response As HttpResponseMessage = Await client.GetAsync("http://www.contoso.com/")
        response.EnsureSuccessStatusCode()
        Dim responseBody As String = Await response.Content.ReadAsStringAsync()
        ' Above three lines can be replaced with new helper method below
        ' Dim responseBody As String = Await client.GetStringAsync(uri)

        Console.WriteLine(responseBody)
    Catch e As HttpRequestException
        Console.WriteLine(Environment.NewLine & "Exception Caught!")
        Console.WriteLine("Message :{0} ", e.Message)
    End Try
End Function

В предыдущем примере кода используется async Task Main() точка входа. Для этой функции требуется C# 7,1 или более поздней версии.

Комментарии

HttpClientЭкземпляр класса выступает в качестве сеанса для отправки HTTP-запросов. HttpClientЭкземпляр — это коллекция параметров, применяемых ко всем запросам, выполняемым этим экземпляром. Кроме того, каждый HttpClient экземпляр использует собственный пул соединений, изолируя его запросы от запросов, выполняемых другими HttpClient экземплярами.

Производные классы не должны переопределять виртуальные методы класса. Вместо этого используйте перегрузку конструктора, которая принимает HttpMessageHandler на себя настройку обработки до или после запроса.

по умолчанию в платформа .NET Framework и Mono HttpWebRequest используется для отправки запросов на сервер. Это поведение можно изменить, указав другой канал в одной из перегрузок конструктора, принимающий экземпляр в HttpMessageHandler качестве параметра. Если требуются такие функции, как проверка подлинности или кэширование, WebRequestHandler можно использовать для настройки параметров, и экземпляр можно передать в конструктор. Возвращаемый обработчик может быть передан в одну из перегрузок конструктора, принимающих HttpMessageHandler параметр.

Если приложение, использующее HttpClient и связанные классы в System.Net.Http пространстве имен, планирует загружать большие объемы данных (50 МБ или более), приложение должно выполнять потоковую передачу этих файлов и не использовать буферизацию по умолчанию. Если используется буферизация по умолчанию, использование памяти клиента будет очень большим, что может привести к значительному снижению производительности.

Свойства класса HttpClient не должны изменяться, пока имеются необработанные запросы, так как они не являются потокобезопасными.

Следующие методы являются потокобезопасными:

  1. CancelPendingRequests

  2. DeleteAsync

  3. GetAsync

  4. GetByteArrayAsync

  5. GetStreamAsync

  6. GetStringAsync

  7. PostAsync

  8. PutAsync

  9. SendAsync

  10. PatchAsync

HttpClient предназначен для однократного создания экземпляра и повторного использования в течение всего жизненного цикла приложения. При создании экземпляра класса HttpClient для каждого запроса будет исчерпано количество сокетов, доступных при высоких нагрузках. Это приведет к ошибкам SocketException. Ниже приведен пример, использующий HttpClient правильно.

public class GoodController : ApiController
{
    private static readonly HttpClient HttpClient;

    static GoodController()
    {
        HttpClient = new HttpClient();
    }
}
  Public Class GoodController
    Inherits ApiController  

    Private Shared ReadOnly HttpClient As HttpClient  

    Shared Sub New()  
        HttpClient = New HttpClient()
    End Sub
End Class

HttpClient— Это интерфейс API высокого уровня, который заключает в оболочку функциональные возможности нижнего уровня, доступные на каждой платформе, где она выполняется.

На каждой платформе HttpClient пытается использовать оптимальный доступный транспорт:

Узел/Среда выполнения Серверная часть
Windows и платформа .NET Framework HttpWebRequest
Windows/моно HttpWebRequest
Windows/увп Windows native WinHttpHandler (с поддержкой HTTP 2,0)
Windows/.NET Core 1.0 — 2.0 Windows native WinHttpHandler (с поддержкой HTTP 2,0)
Android или Xamarin Выбирается во время сборки. Можно использовать HttpWebRequest или настроить для использования машинного кода Android HttpURLConnection
iOS, tvOS, watchOS/Xamarin Выбирается во время сборки. Может использовать HttpWebRequest или быть настроено для использования Apple NSUrlSession (с поддержкой HTTP 2,0).
macOS/Xamarin Выбирается во время сборки. Может использовать HttpWebRequest или быть настроено для использования Apple NSUrlSession (с поддержкой HTTP 2,0).
macOS/Mono HttpWebRequest
macOS/. NET Core 1.0 — 2.0 libcurlHTTP-транспорт на основе (с поддержкой HTTP 2,0)
Linux/Mono HttpWebRequest
Linux/. NET Core 1.0 — 2.0 libcurlHTTP-транспорт на основе (с поддержкой HTTP 2,0)
.NET Core 2,1 и более поздние версии System.Net.Http.SocketsHttpHandler

Пользователи также могут настроить конкретный транспорт для HttpClient , вызвав HttpClient конструктор, который принимает HttpMessageHandler .

HttpClient и .NET Core

Начиная с .NET Core 2,1, System.Net.Http.SocketsHttpHandler класс вместо HttpClientHandler предоставляет реализацию, используемую сетевыми классами HTTP более высокого уровня, такими как HttpClient . Использование SocketsHttpHandler предлагает ряд преимуществ.

  • Значительное улучшение производительности по сравнению с предыдущей реализацией.
  • Исключение зависимостей платформы, которое упрощает развертывание и обслуживание. Например, больше не зависит libcurl от .NET Core для macOS и .NET Core для Linux.
  • Согласованное поведение на всех платформах .NET.

если это изменение нежелательно, на Windows можно по-прежнему использовать WinHttpHandler ссылку на NuGet пакет и передать его HttpClient конструктору вручную.

Настройка поведения с помощью параметров конфигурации времени выполнения

Некоторые аспекты HttpClient поведения настраиваются с помощью параметров конфигурации времени выполнения. Однако поведение этих параметров отличается в разных версиях .NET. Например, в .NET Core 2,1-3,1 можно указать SocketsHttpHandler , используется ли по умолчанию, но этот параметр больше не доступен, начиная с .net 5,0.

Конструкторы

HttpClient()

Инициализирует новый экземпляр класса HttpClient, используя HttpClientHandler, который удаляется при удалении этого экземпляра.

HttpClient(HttpMessageHandler)

Инициализирует новый экземпляр класса HttpClient с указанным обработчиком. Обработчик удаляется при удалении этого экземпляра.

HttpClient(HttpMessageHandler, Boolean)

Инициализирует новый экземпляр класса HttpClient с предоставленным обработчиком и указывает, должен ли этот обработчик удаляться при удалении этого экземпляра.

Свойства

BaseAddress

Возвращает или задает базовый адрес универсального кода ресурса (URI) интернет-ресурса, используемого при отправке запросов.

DefaultProxy

Возвращает или устанавливает глобальный прокси-сервер HTTP.

DefaultRequestHeaders

Возвращает заголовки, которые должны отправляться с каждым запросом.

DefaultRequestVersion

Возвращает или задает версию HTTP по умолчанию, используемую в последующих запросах, выполняемых этим экземпляром HttpClient.

DefaultVersionPolicy

Возвращает или задает политику выбора версий по умолчанию для неявно созданных запросов в удобных методах, например GetAsync(String) и PostAsync(String, HttpContent).

MaxResponseContentBufferSize

Возвращает или задает максимальное число байтов в буфере при чтении содержимого отклика.

Timeout

Возвращает или задает время ожидания для выполнения запроса.

Методы

CancelPendingRequests()

Отмена всех ожидающих запросов на этом экземпляре.

DeleteAsync(String)

Отправка запроса DELETE согласно указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

DeleteAsync(String, CancellationToken)

Отправка запроса DELETE к указанному URI с токеном отмены в качестве асинхронной операции.

DeleteAsync(Uri)

Отправка запроса DELETE согласно указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

DeleteAsync(Uri, CancellationToken)

Отправка запроса DELETE к указанному URI с токеном отмены в качестве асинхронной операции.

Dispose()

Освобождает неуправляемые ресурсы и удаляет управляемые ресурсы, используемые объектом HttpMessageInvoker.

(Унаследовано от HttpMessageInvoker)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом HttpClient, и опционально удаляет управляемые ресурсы.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAsync(String)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

GetAsync(String, CancellationToken)

Отправка запроса DELETE указанному универсальному коду ресурса (URI) с токеном отмены в качестве асинхронной операции.

GetAsync(String, HttpCompletionOption)

Отправка запроса GET указанному универсальному коду ресурса (URI) с параметром "выполнение HTTP" в качестве асинхронной операции.

GetAsync(String, HttpCompletionOption, CancellationToken)

Отправка запроса GET к указанному универсальному коду ресурса (URI) с параметром "выполнение HTTP" и токеном отмены в качестве асинхронной операции.

GetAsync(Uri)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

GetAsync(Uri, CancellationToken)

Отправка запроса DELETE указанному универсальному коду ресурса (URI) с токеном отмены в качестве асинхронной операции.

GetAsync(Uri, HttpCompletionOption)

Отправка запроса GET указанному универсальному коду ресурса (URI) с параметром "выполнение HTTP" в качестве асинхронной операции.

GetAsync(Uri, HttpCompletionOption, CancellationToken)

Отправка запроса GET к указанному универсальному коду ресурса (URI) с параметром "выполнение HTTP" и токеном отмены в качестве асинхронной операции.

GetByteArrayAsync(String)

Отправляет запрос GET согласно указанному универсальному коду ресурса (URI) и возвращает текст ответа в виде массива байтов в асинхронной операции.

GetByteArrayAsync(String, CancellationToken)

Отправляет запрос GET согласно указанному универсальному коду ресурса (URI) и возвращает текст ответа в виде массива байтов в асинхронной операции.

GetByteArrayAsync(Uri)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде массива байтов в асинхронной операции.

GetByteArrayAsync(Uri, CancellationToken)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде массива байтов в асинхронной операции.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetStreamAsync(String)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде потока в асинхронной операции.

GetStreamAsync(String, CancellationToken)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде потока в асинхронной операции.

GetStreamAsync(Uri)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде потока в асинхронной операции.

GetStreamAsync(Uri, CancellationToken)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде потока в асинхронной операции.

GetStringAsync(String)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде строки в асинхронной операции.

GetStringAsync(String, CancellationToken)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде строки в асинхронной операции.

GetStringAsync(Uri)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде строки в асинхронной операции.

GetStringAsync(Uri, CancellationToken)

Отправка запроса GET согласно указанному универсальному коду ресурса (URI) и возврат текста ответа в виде строки в асинхронной операции.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
PatchAsync(String, HttpContent)

Асинхронно отправляет запрос PATCH к универсальному коду ресурса (URI), заданному в виде строки.

PatchAsync(String, HttpContent, CancellationToken)

Асинхронно отправляет запрос PATCH с токеном отмены к универсальному коду ресурса (URI), представленному строкой.

PatchAsync(Uri, HttpContent)

Отправляет запрос PATCH в качестве асинхронной операции.

PatchAsync(Uri, HttpContent, CancellationToken)

Отправляет запрос PATCH с токеном отмены в качестве асинхронной операции.

PostAsync(String, HttpContent)

Отправка запроса POST по указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

PostAsync(String, HttpContent, CancellationToken)

Отправка запроса POST с токеном отмены в качестве асинхронной операции.

PostAsync(Uri, HttpContent)

Отправка запроса POST по указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

PostAsync(Uri, HttpContent, CancellationToken)

Отправка запроса POST с токеном отмены в качестве асинхронной операции.

PutAsync(String, HttpContent)

Отправка запроса PUT по указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

PutAsync(String, HttpContent, CancellationToken)

Отправка запроса PUT с токеном отмены в качестве асинхронной операции.

PutAsync(Uri, HttpContent)

Отправка запроса PUT по указанному универсальному коду ресурса (URI) в качестве асинхронной операции.

PutAsync(Uri, HttpContent, CancellationToken)

Отправка запроса PUT с токеном отмены в качестве асинхронной операции.

Send(HttpRequestMessage)

Отправляет HTTP-запрос с указанным запросом.

Send(HttpRequestMessage, CancellationToken)

Отправляет HTTP-запрос с указанным запросом и маркером отмены.

Send(HttpRequestMessage, CancellationToken)

Отправляет HTTP-запрос с указанным запросом и маркером отмены.

(Унаследовано от HttpMessageInvoker)
Send(HttpRequestMessage, HttpCompletionOption)

Отправляет HTTP-запрос.

Send(HttpRequestMessage, HttpCompletionOption, CancellationToken)

Отправляет HTTP-запрос с указанным запросом, параметром завершения и маркером отмены.

SendAsync(HttpRequestMessage)

Отправка HTTP-запроса в качестве асинхронной операции.

SendAsync(HttpRequestMessage, CancellationToken)

Отправка HTTP-запроса в качестве асинхронной операции.

SendAsync(HttpRequestMessage, HttpCompletionOption)

Отправка HTTP-запроса в качестве асинхронной операции.

SendAsync(HttpRequestMessage, HttpCompletionOption, CancellationToken)

Отправка HTTP-запроса в качестве асинхронной операции.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Методы расширения

GetFromJsonAsync(HttpClient, String, Type, JsonSerializerOptions, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync(HttpClient, String, Type, JsonSerializerContext, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync(HttpClient, String, Type, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync(HttpClient, Uri, Type, JsonSerializerOptions, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync(HttpClient, Uri, Type, JsonSerializerContext, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync(HttpClient, Uri, Type, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, String, JsonSerializerOptions, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, String, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, String, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, Uri, JsonSerializerOptions, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, Uri, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

GetFromJsonAsync<TValue>(HttpClient, Uri, CancellationToken)

Отправляет запрос GET по указанному универсальному коду ресурса (URI) и возвращает значение, полученное в результате десериализации текста ответа в формате JSON в ходе асинхронной операции.

PostAsJsonAsync<TValue>(HttpClient, String, TValue, JsonSerializerOptions, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PostAsJsonAsync<TValue>(HttpClient, String, TValue, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PostAsJsonAsync<TValue>(HttpClient, String, TValue, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonSerializerOptions, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, CancellationToken)

Отправляет запрос POST по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в формате JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, String, TValue, JsonSerializerOptions, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, String, TValue, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, String, TValue, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonSerializerOptions, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonTypeInfo<TValue>, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, CancellationToken)

Отправляет запрос PUT по указанному универсальному коду ресурса (URI), содержащий сериализованное значение value в виде JSON в тексте запроса.

Применяется к

См. также раздел