Freigeben über


HttpCompletionOption Enumeration

Definition

Gibt an, ob HttpClient Vorgänge entweder abgeschlossen werden sollen, sobald eine Antwort verfügbar ist, oder nach dem Lesen der gesamten Antwortnachricht einschließlich des Inhalts.

public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption = 
Public Enum HttpCompletionOption
Vererbung
HttpCompletionOption

Felder

Name Wert Beschreibung
ResponseContentRead 0

Der Vorgang sollte nach dem Lesen der gesamten Antwort einschließlich des Inhalts abgeschlossen werden.

ResponseHeadersRead 1

Der Vorgang sollte abgeschlossen werden, sobald eine Antwort verfügbar ist und Header gelesen werden. Der Inhalt ist noch nicht gelesen.

Hinweise

Warnung

Der HttpCompletionOption Wert wirkt sich auf den Bereich des in den HttpClient Optionen beim Lesen einer Antwort angegebenen Timeouts aus. The timeout on the HttpClient always applies on the relevant invoked methods up up to the point where those methods complete/return. Entscheidend ist, dass bei Verwendung der ResponseHeadersRead Option das Timeout nur dann gilt, wenn die Kopfzeilen enden und der Inhalt beginnt. Der Vorgang zum Lesen von Inhalten muss separat ausgezeitet werden, falls der Server die Statuszeile und die Kopfzeilen umgehend zurückgibt, aber zu lange dauert, um den Inhalt zurückzugeben. Diese Überlegung gilt auch für die MaxResponseContentBufferSize Eigenschaft. Der Grenzwert wird nur bei Verwendung ResponseContentReaderzwungen. Im Folgenden finden Sie ein Beispiel, das diesen Punkt veranschaulicht:

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

Gilt für: