Mam taki middleware:

app.Use(async (context, next) => {
            await context.Response
            .WriteAsync($"Before \n");
            await next();
            await context.Response
            .WriteAsync($"After \n"); 
        });

oraz taki endpoint:

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });

Powoduje to wyjątek:

An unhandled exception was thrown by the application. System.InvalidOperationException: Headers are read-only, response has already started.

Gdy mój middleware wygląda tak:

app.Use(async (context, next) => {
            await next();
            await context.Response
            .WriteAsync($"After \n"); 
        });

Wszystko działa jak należy.
Jeżeli mój endpoint wygląda następująco:

app.UseEndpoints(endpoints => {
                endpoints.MapGet("/", async context => { 
                await context.Response.WriteAsync("Hello World!");
                });
            });

To wszystko działa normalnie w obu przypadkach, gdy modyfikuję odpowiedź w trakcie przetwarzania żądania jak i w drodze powrotnej,
Natomiast w przypadku, gdy użyję endpoints.MapControllerRoute zamiast endpoints.MapGet odpowiedź można modyfikować w drodze powrotnej. Ktoś mógłby mi wyjaśnić o co chodzi?