Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

664
Visualizações
IAsyncActionFilter, intentando registrar el cuerpo de la solicitud, pero está vacío

Estoy tratando de configurar IAsyncActionFilter para registrar el cuerpo de la solicitud para algunas solicitudes de API. Pero cuando trato de leer el flujo del cuerpo siempre obtengo una cadena vacía.

Aquí está mi código: StringContent siempre es una cadena vacía, aunque haya un cuerpo json en las solicitudes posteriores.

 public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { ActionExecutedContext rContext = null; string stringContent = string.Empty; try { context.HttpContext.Request.EnableBuffering(); context.HttpContext.Request.Body.Position = 0; using (var reader = new StreamReader(context.HttpContext.Request.Body)) { stringContent = await reader.ReadToEndAsync(); context.HttpContext.Request.Body.Position = 0; } rContext = await next(); } catch (Exception) { throw; } }

No quiero usar middleware, porque necesito registrar solo algunos de los controladores.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El cuerpo de la solicitud ya ha sido leído por el enlazador de modelos MVC en el momento en que su IAsyncActionFilter ejecuta https://github.com/aspnet/Mvc/issues/5260 .

Como una solución rápida, puede agregar

 app.Use(next => context => { context.Request.EnableBuffering(); return next(context); });

en su startup.cs Configure () ANTES de su llamada UseEndpoints

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); app.Use(next => context => { context.Request.EnableBuffering(); return next(context); }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }

Por supuesto, esto habilitaría el almacenamiento en búfer del cuerpo de la solicitud para todas sus solicitudes, lo que puede no ser deseable. Si ese es el caso, tendría que agregar alguna lógica condicional al delegado EnableBuffering.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda