HttpCompletionOption Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica se HttpClient as operações devem ser consideradas concluídas assim que uma resposta estiver disponível, ou após ler toda a mensagem de resposta, incluindo o conteúdo.
public enum class HttpCompletionOption
public enum HttpCompletionOption
type HttpCompletionOption =
Public Enum HttpCompletionOption
- Herança
Campos
| Name | Valor | Description |
|---|---|---|
| ResponseContentRead | 0 | A operação deve ser concluída após ler toda a resposta, incluindo o conteúdo. |
| ResponseHeadersRead | 1 | A operação deve ser concluída assim que uma resposta estiver disponível e os cabeçalhos forem lidos. O conteúdo ainda não foi lido. |
Observações
Warning
O HttpCompletionOption valor afeta o âmbito do timeout especificado nas HttpClient opções ao ler uma resposta. O timeout aplica-se HttpClient sempre aos métodos invocados relevantes até ao momento em que esses métodos se completam/retornam. Crucialmente, ao usar a ResponseHeadersRead opção, o timeout aplica-se apenas até ao ponto onde os cabeçalhos terminam e o conteúdo começa. A operação de leitura de conteúdo precisa de ser temporada separadamente caso o servidor devolva prontamente a linha de estado e os cabeçalhos, mas demore demasiado tempo a devolver o conteúdo. Esta consideração aplica-se também à MaxResponseContentBufferSize propriedade. O limite só é aplicado quando se utiliza ResponseContentRead. Abaixo está um exemplo que ilustra este ponto:
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);