From ad236f626fdd4facf22386eda753e3d18619a41c Mon Sep 17 00:00:00 2001 From: jdevillard Date: Mon, 27 May 2024 21:14:25 +0200 Subject: [PATCH] Add Http Response Behavior to answer synchronously using the HttpResponse Activity (#5446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update WriteHttpResponse.cs to call response.CompleteAsync() * Add options in HttpActivityOptions --------- Co-authored-by: Ciaran ODonnell Co-authored-by: Jérémie DEVILLARD --- src/modules/Elsa.Http/Activities/WriteHttpResponse.cs | 11 +++++++++-- src/modules/Elsa.Http/Options/HttpActivityOptions.cs | 8 +++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs index ab6c43685..69cd8c0bf 100644 --- a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs +++ b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs @@ -10,6 +10,8 @@ using Elsa.Workflows.UIHints; using Elsa.Workflows.Exceptions; using Elsa.Workflows.Models; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using Elsa.Http.Options; namespace Elsa.Http; @@ -133,7 +135,12 @@ public class WriteHttpResponse : Activity await response.WriteAsync("The response includes a type that cannot be serialized."); } } - } + } + + //Check if the configuration is set to flush immediatly the response to the caller. + var options = context.GetRequiredService>(); + if (options.Value.WriteHttpResponseSynchronously) + await response.CompleteAsync(); // Complete activity. await context.CompleteActivityAsync(); @@ -144,4 +151,4 @@ public class WriteHttpResponse : Activity : content is string ? "text/plain" : "application/json"; -} \ No newline at end of file +} diff --git a/src/modules/Elsa.Http/Options/HttpActivityOptions.cs b/src/modules/Elsa.Http/Options/HttpActivityOptions.cs index 76458bcec..f34f76dea 100644 --- a/src/modules/Elsa.Http/Options/HttpActivityOptions.cs +++ b/src/modules/Elsa.Http/Options/HttpActivityOptions.cs @@ -35,5 +35,11 @@ public class HttpActivityOptions "text/html", "text/json", "text/xml", - }; + }; + + /// + /// A boolean to opt-in if you want to call CompleteAsync() in the HttpResponse Activity + /// and not waiting for the end of the HttpMiddleware. + /// + public Boolean WriteHttpResponseSynchronously { get; set; } = false; } \ No newline at end of file