Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
¿Cómo un middleware maneja automáticamente las excepciones lanzadas por el middleware debajo de él?

Digamos que tenemos el siguiente código:

 public class MiddleWareFirst { private RequestDelegate next; public MiddleWareFirst(RequestDelegate nextDelegate) { next = nextDelegate; } public async Task Invoke(HttpContext context) { await context.Response.WriteAsync("Start \n"); if (next != null) { await next(context); } } } public class MiddleWareSecond { private RequestDelegate next; public MiddleWareSecond(RequestDelegate nextDelegate) { next = nextDelegate; } public async Task Invoke(HttpContext context) { if (next != null) { await next(context); // <---- should throw the exception caused by MiddleWareThird } } } public class MiddleWareThird { private RequestDelegate next; public MiddleWareThird(RequestDelegate nextDelegate) { next = nextDelegate; } public async Task Invoke(HttpContext context) { throw new System.Exception(); } }

y construir la canalización como:

 // Configure method in startup.cs app.UseMiddleware<MiddleWareFirst>(); app.UseMiddleware<MiddleWareSecond>(); app.UseMiddleware<MiddleWareThird>();

Puede ver que MiddleWareThird lanza una excepción. Cuando ejecuto la aplicación, puedo ver que el resultado de la página web es "Inicio", lo que me confunde, ¿no debería ser un error 500?

Porque sabemos que await puede lanzar la excepción de una tarea. Entonces, para MiddleWareSecond , dado que no usa el bloque try catch para capturar la excepción, la tarea que regresa a MiddleWareFirst debe contener la excepción internamente. Dado que MiddleWareFirst no utiliza el bloque try catch tampoco, la excepción se propagará al servidor web, lo que debería generar una página de error 500. Pero la salida es normal, entonces, ¿cómo se traga mágicamente la excepción lanzada en MiddleWareThird ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

la excepción se propagará al servidor web, lo que debería generar una página de error 500

Como ya ha iniciado la respuesta con await context.Response.WriteAsync("Start \n"); el código de estado 200 se escribe en el flujo de respuesta según el protocolo HTTP que envía el estado en la primera línea.

Si se lanza una excepción antes WriteAsync , obtendrá 500 del servidor como espera.

Esto es manejado por la infraestructura aspnet core , también en los registros puede notar que se registra la excepción.

Por supuesto, puede tener un middleware personalizado para manejar excepciones como DeveloperExceptionPageMiddleware

 public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { //... } }

https://github.com/dotnet/aspnetcore/blob/f74c6f12d868b8e5c91e85f1a2bcbd1134ed5fd5/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.cs#L90-L127

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!