HttpContext em .NET | Csharp
- HttpContext em .NET | Csharp
info
Vídeo Explicativo: 🔗 Clique aqui
✅ Por que é mais rápido? (Explicação Técnica)
1. Evita o custo do model binding do ASP.NET Core
Quando você coloca um parâmetro como:
[HttpPost]
public IActionResult Processar(MeuObjeto obj) { ... }
O ASP.NET Core faz um processo chamado Model Binding, que envolve:
- Ler o body (stream)
- Bufferizar o conteúdo
- Detectar tipo e metadados
- Aplicar validações de binding
- Rodar analisadores (annotations, binders especiais)
- Desserializar via
System.Text.Json - Popular erros de model state
- Eventuais conversões extras
Essa cadeia tem várias etapas, filtros e abstrações — mesmo quando você não precisa delas.
Quando você usa:
public async Task<IResult> Processar(HttpContext ctx)
E manualmente faz:
var body = await new StreamReader(ctx.Request.Body).ReadToEndAsync();
var obj = JsonSerializer.Deserialize<MeuObjeto>(body);
Você pula completamente o pipeline de Model Binding do ASP.NET Core.
Quanto maior o volume de requests, maior o ganho.
2. Evita re-leitura ou buffering do body
O Model Binding por padrão precisa habilitar buffering para conseguir ler o corpo mais de uma vez, especialmente se filtros, validadores e middlewares precisarem dele.
Quando você lê manualmente:
- Você controla a leitura
- Lê apenas uma vez
- Evita
EnableBuffering() - Evita overhead de memória (buffer pool)