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?