Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

658
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda