From 689f1b4f817b1629762d0095c9cd848e5f5633de Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 21 Jan 2019 21:24:11 +0100 Subject: [PATCH] File result improved. --- Dockerfile | 4 +++- .../Controllers/Assets/AssetContentController.cs | 2 +- .../Controllers/Backups/BackupContentController.cs | 2 +- .../Api/Controllers/Statistics/UsagesController.cs | 2 +- src/Squidex/Pipeline/FileCallbackResult.cs | 8 ++++++-- src/Squidex/Pipeline/FileCallbackResultExecutor.cs | 13 ++++++++++--- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7abb5d4f4..6eefd8277 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,9 @@ FROM microsoft/dotnet:2.2-runtime-deps-alpine WORKDIR /app # add libuv -RUN apk add --no-cache libuv \ +RUN apk update \ + && apk add --no-cache libc6-compat \ + && apk add --no-cache libuv \ && ln -s /usr/lib/libuv.so.1 /usr/lib/libuv.so # Copy from build stage diff --git a/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs index 043650498..f0cfeccbf 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs @@ -70,7 +70,7 @@ namespace Squidex.Areas.Api.Controllers.Assets Response.Headers[HeaderNames.ETag] = entity.FileVersion.ToString(); - return new FileCallbackResult(entity.MimeType, entity.FileName, async bodyStream => + return new FileCallbackResult(entity.MimeType, entity.FileName, true, async bodyStream => { var assetId = entity.Id.ToString(); diff --git a/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs b/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs index 1fd15760b..f94233fad 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs @@ -45,7 +45,7 @@ namespace Squidex.Areas.Api.Controllers.Backups [AllowAnonymous] public IActionResult GetBackupContent(string app, Guid id) { - return new FileCallbackResult("application/zip", "Backup.zip", bodyStream => + return new FileCallbackResult("application/zip", "Backup.zip", false, bodyStream => { return assetStore.DownloadAsync(id.ToString(), 0, null, bodyStream); }); diff --git a/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs b/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs index b128c6f51..2449082a3 100644 --- a/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs +++ b/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs @@ -64,7 +64,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics { var today = DateTime.Today; - return new FileCallbackResult("text/csv", $"Usage-{today:yyy-MM-dd}.csv", stream => + return new FileCallbackResult("text/csv", $"Usage-{today:yyy-MM-dd}.csv", false, stream => { return appLogStore.ReadLogAsync(App, today.AddDays(-30), today, stream); }); diff --git a/src/Squidex/Pipeline/FileCallbackResult.cs b/src/Squidex/Pipeline/FileCallbackResult.cs index d292fcfda..5cc764a99 100644 --- a/src/Squidex/Pipeline/FileCallbackResult.cs +++ b/src/Squidex/Pipeline/FileCallbackResult.cs @@ -13,15 +13,19 @@ using Microsoft.Extensions.DependencyInjection; namespace Squidex.Pipeline { - public class FileCallbackResult : FileResult + public sealed class FileCallbackResult : FileResult { + public bool Send404 { get; } + public Func Callback { get; } - public FileCallbackResult(string contentType, string name, Func callback) + public FileCallbackResult(string contentType, string name, bool send404, Func callback) : base(contentType) { FileDownloadName = name; + Send404 = send404; + Callback = callback; } diff --git a/src/Squidex/Pipeline/FileCallbackResultExecutor.cs b/src/Squidex/Pipeline/FileCallbackResultExecutor.cs index 72d1d2ef8..5033af37f 100644 --- a/src/Squidex/Pipeline/FileCallbackResultExecutor.cs +++ b/src/Squidex/Pipeline/FileCallbackResultExecutor.cs @@ -30,10 +30,17 @@ namespace Squidex.Pipeline } catch (Exception e) { - Logger.LogCritical(new EventId(99), e, "Failed to send result."); + if (!context.HttpContext.Response.HasStarted && result.Send404) + { + context.HttpContext.Response.Headers.Clear(); + context.HttpContext.Response.StatusCode = 404; - context.HttpContext.Response.Headers.Clear(); - context.HttpContext.Response.StatusCode = 404; + Logger.LogCritical(new EventId(99), e, "Failed to send result."); + } + else + { + throw; + } } } }