Si creo una aplicación ASP.net Web Core en blanco, luego reemplazo el método Configure() en Startup.cs con el siguiente método, cada operación Use() y Run() se llama dos veces.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.Use(async (context, next) => { // Do work that doesn't write to the Response. await next.Invoke(); // Do logging or other work that doesn't write to the Response. int i = 0; }); app.Use(async (context, next) => { // Do work that doesn't write to the Response. await next.Invoke(); // Do logging or other work that doesn't write to the Response. int j = 0; }); app.Run(async context => { await context.Response.WriteAsync("Hello, World!"); }); }Entonces el orden de las operaciones es:
Luego, regresa a través de la tubería.
Todo esto se espera a medida que pasa a través del Middleware y viceversa. Pero luego, cada uno de los pasos anteriores se repite de nuevo.
¿Por qué cada componente de middleware se llama dos veces?
La razón por la que se llama dos veces es porque su navegador está realizando dos solicitudes a su aplicación. Uno para la ruta raíz de la aplicación '/', el otro para /favicon.ico (algunos navegadores como Chrome hacen una solicitud de favicon de forma predeterminada, captura de pantalla a continuación ). Puede consultar las herramientas de desarrollo de su navegador.
También puede verificar eso colocando un registro de depuración dentro de la aplicación. app.Use para ver las rutas de solicitud. p.ej
app.Use(async (context, next) => { Debug.WriteLine(context.Request.Path.Value); // Do work that doesn't write to the Response. await next.Invoke(); // Do logging or other work that doesn't write to the Response. int i = 0; });Por lo tanto, la configuración de su middleware se ejecuta dos veces. Una vez para la raíz '/' y la segunda vez para la ruta '/favicon.ico'