Sdílet prostřednictvím


HttpCompletionOption Výčet

Definice

Označuje, jestli se operace HttpClient mají považovat za dokončené, jakmile bude odpověď k dispozici, nebo po přečtení celé zprávy odpovědi včetně obsahu.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Dědičnost
HttpCompletionOption

Pole

Name Hodnota Description
ResponseContentRead 0

Operace by se měla dokončit po přečtení celé odpovědi včetně obsahu.

ResponseHeadersRead 1

Operace by se měla dokončit, jakmile bude k dispozici odpověď a hlavičky se načtou. Obsah se ještě nečte.

Poznámky

Výstraha

Hodnota HttpCompletionOption má vliv na rozsah časového limitu zadaného v HttpClient možnostech při čtení odpovědi. Časový limit vždy HttpClient platí pro příslušné vyvolané metody až do bodu, kdy se tyto metody dokončí nebo vrátí. Při použití ResponseHeadersRead této možnosti platí časový limit jenom na místo, kde záhlaví končí a obsah začíná. Operace čtení obsahu musí být časově oddělena, pokud server okamžitě vrátí stavový řádek a hlavičky, ale vrácení obsahu trvá příliš dlouho. Tento faktor platí také pro MaxResponseContentBufferSize vlastnost. Limit se vynucuje pouze při použití ResponseContentRead. Níže je příklad ilustrující tento bod:

using var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(30);
httpClient.MaxResponseContentBufferSize = 1_000; // This will be ignored

// Because we're specifying the ResponseHeadersRead option,
// the 30-second timeout applies only up until the headers are received.
// It does not affect future operations that interact with the response content.
using HttpResponseMessage response = await httpClient.GetAsync(
    "http://localhost:12345/",
    HttpCompletionOption.ResponseHeadersRead);

// Do other checks that don't rely on the content first, like status code validation.
response.EnsureSuccessStatusCode();

// Since the HttpClient.Timeout will not apply to reading the content,
// you must enforce it yourself, for example by using a CancellationTokenSource.
using var cancellationSource = new CancellationTokenSource(TimeSpan.FromSeconds(15));

// If you wish to enforce the MaxResponseContentBufferSize limit as well,
// you can do so by calling the LoadIntoBufferAsync helper first.
await response.Content.LoadIntoBufferAsync(1_000, cancellationSource.Token);

// Make sure to pass the CancellationToken to all methods.
string content = await response.Content.ReadAsStringAsync(cancellationSource.Token);

Platí pro