Dieselbe Kennung zweimal zu vergeben war kein Fehler, sah aber so aus

Im Zuordnungsdialog stand „An error occurred while processing your
request." — englisch, ohne Grund, ohne nächsten Schritt. Dahinter steckte
der Eindeutigkeitsindex: der gewählte Film war in derselben Mediathek
schon vergeben, und die Kennung wurde trotzdem blind gesetzt.

Es ist aber gar kein Fehler. Zwei Dateien, die denselben Film meinen,
gehören zusammengelegt — genau das tut der Scan am Ende jedes Laufs, und
der Sehfortschritt wird dabei gefaltet. Die Korrektur von Hand tut es
jetzt auch, für Filme wie für Serien.

Dazu die zweite Hälfte: auch das Letzte, was durchrutscht, spricht
Deutsch. Der Fehlerbehandler am Ende der Kette gab bisher die Vorgabe von
ASP.NET aus. Jetzt bekommt jede Ausnahme einen deutschen Satz, und die
Einzelheiten gehen ins Tagesprotokoll — dorthin, wo man sie sucht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-04 21:53:20 +02:00
co-authored by Claude Opus 5
parent 0c07d4efc7
commit 5a5cf3d006
3 changed files with 120 additions and 3 deletions
+27 -1
View File
@@ -156,7 +156,33 @@ using (var bereich = app.Services.CreateScope())
await db.Database.MigrateAsync();
}
app.UseExceptionHandler();
// **Auch das Letzte, was durchrutscht, spricht Deutsch.**
//
// Die Vorgabe von ASP.NET antwortet mit „An error occurred while processing
// your request." — englisch, ohne Grund, ohne nächsten Schritt. Genau das
// stand im Zuordnungsdialog, als eine Kennung doppelt vergeben werden
// sollte. Hier bekommt jede Ausnahme, die es bis nach oben schafft, einen
// deutschen Satz; die Einzelheiten gehen ins Tagesprotokoll, wo man sie
// sucht.
app.UseExceptionHandler(zweig => zweig.Run(async zusammenhang =>
{
var fehler = zusammenhang.Features
.Get<Microsoft.AspNetCore.Diagnostics.IExceptionHandlerFeature>()?.Error;
if (fehler is not null)
{
zusammenhang.RequestServices.GetRequiredService<Tagebuch>().Schreiben(
$"{zusammenhang.Request.Method} {zusammenhang.Request.Path}: "
+ Fehlertext.FuersProtokoll(fehler),
Tagebuch.Art.Fehler);
}
zusammenhang.Response.StatusCode = StatusCodes.Status500InternalServerError;
await Results.Problem(
fehler is null ? "Etwas ist schiefgegangen." : Fehlertext.FuerMenschen(fehler),
statusCode: StatusCodes.Status500InternalServerError)
.ExecuteAsync(zusammenhang);
}));
app.UseStatusCodePages();
app.UseRateLimiter();