Partager via


HttpCompletionOption Énumération

Définition

Indique si HttpClient opérations doivent être considérées comme terminées dès qu’une réponse est disponible ou après avoir lu l’intégralité du message de réponse, y compris le contenu.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Héritage
HttpCompletionOption

Champs

Nom Valeur Description
ResponseContentRead 0

L’opération doit se terminer après avoir lu l’intégralité de la réponse, y compris le contenu.

ResponseHeadersRead 1

L’opération doit se terminer dès qu’une réponse est disponible et que les en-têtes sont lus. Le contenu n’est pas encore lu.

Remarques

Avertissement

La HttpCompletionOption valeur affecte l’étendue du délai d’expiration spécifié dans les options lors de la HttpClient lecture d’une réponse. Le délai d’expiration du HttpClient délai d’attente s’applique toujours aux méthodes appelées pertinentes jusqu’au point où ces méthodes se terminent/retournent. De façon cruciale, lorsque vous utilisez l’option ResponseHeadersRead , le délai d’attente s’applique uniquement à l’emplacement où les en-têtes se terminent et le contenu démarre. L’opération de lecture du contenu doit être expirée séparément si le serveur retourne rapidement la ligne d’état et les en-têtes, mais prend trop de temps pour renvoyer le contenu. Cette considération s’applique également à la MaxResponseContentBufferSize propriété. La limite est appliquée uniquement lors de l’utilisation ResponseContentRead. Voici un exemple illustrant ce point :

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

S’applique à