Condividi tramite


HttpCompletionOption Enumerazione

Definizione

Indica se HttpClient operazioni devono essere considerate completate non appena è disponibile una risposta o dopo aver letto l'intero messaggio di risposta, incluso il contenuto.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Ereditarietà
HttpCompletionOption

Campi

Nome Valore Descrizione
ResponseContentRead 0

L'operazione deve essere completata dopo aver letto l'intera risposta, incluso il contenuto.

ResponseHeadersRead 1

L'operazione deve essere completata non appena è disponibile una risposta e le intestazioni vengono lette. Il contenuto non è ancora letto.

Commenti

Avviso

Il HttpCompletionOption valore influisce sull'ambito del timeout specificato nelle opzioni durante la HttpClient lettura di una risposta. Il timeout sull'oggetto HttpClient si applica sempre ai metodi richiamati pertinenti fino al punto in cui tali metodi vengono completati/restituiti. In modo cruciale, quando si usa l'opzione ResponseHeadersRead , il timeout si applica solo alla fine delle intestazioni e all'avvio del contenuto. L'operazione di lettura del contenuto deve essere timeout separatamente nel caso in cui il server restituisca tempestivamente la riga di stato e le intestazioni, ma richiede troppo tempo per restituire il contenuto. Questa considerazione si applica anche alla MaxResponseContentBufferSize proprietà . Il limite viene applicato solo quando si usa ResponseContentRead. Di seguito è riportato un esempio che illustra questo punto:

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

Si applica a