From f9fb791dca19ce00ad3d0d17870056eb7c17eaed Mon Sep 17 00:00:00 2001 From: Erik Date: Mon, 9 Feb 2026 20:48:19 +0100 Subject: [PATCH] =?UTF-8?q?Pfadproblem=20beim=20L=C3=B6schen=20beseitigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Components/Pages/Storage.razor | 21 ++++++++++++++++----- Program.cs | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Components/Pages/Storage.razor b/Components/Pages/Storage.razor index 13f1728..1060f68 100644 --- a/Components/Pages/Storage.razor +++ b/Components/Pages/Storage.razor @@ -149,11 +149,20 @@ objects = await Http.GetFromJsonAsync>($"/api/storage/buckets/{selectedBucket}/objects") ?? new(); } + + + private static string EncodeKeyForPath(string key) + => string.Join("/", (key ?? string.Empty) + .Split('/', StringSplitOptions.RemoveEmptyEntries) + .Select(Uri.EscapeDataString)); + private string GetDownloadUrl(string key) { - // URL-encode für sichere Übergabe in Catch-all Route - var encodedKey = Uri.EscapeDataString(key); - return $"/api/storage/buckets/{selectedBucket}/download/{encodedKey}"; + + // JEDES Segment encodieren, Slash erhalten -> /a/b/c + var encodedPath = EncodeKeyForPath(key); + return $"/api/storage/buckets/{selectedBucket}/download/{encodedPath}"; + } @@ -172,8 +181,10 @@ { if (string.IsNullOrEmpty(selectedBucket)) return; - var encodedKey = Uri.EscapeDataString(key); - var url = $"/api/storage/buckets/{selectedBucket}/objects/{encodedKey}"; + + var encodedPath = EncodeKeyForPath(key); + var url = $"/api/storage/buckets/{selectedBucket}/objects/{encodedPath}"; + var resp = await Http!.DeleteAsync(url); if (resp.IsSuccessStatusCode) diff --git a/Program.cs b/Program.cs index bf86c26..c386f72 100644 --- a/Program.cs +++ b/Program.cs @@ -188,7 +188,7 @@ CancellationToken ct) => await svc.DeleteObjectAsync(bucket, key); await meta.DeleteByKeyAsync(bucket, key, ct); return Results.NoContent(); - }); + }).DisableAntiforgery();