diff --git a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs
index 58ee79d93..ebb9026fa 100644
--- a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs
+++ b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs
@@ -85,7 +85,8 @@ public class WriteHttpResponse : Activity
private async Task WriteResponseAsync(ActivityExecutionContext context, HttpResponse response)
{
// Set status code.
- response.StatusCode = (int)context.Get(StatusCode);
+ var statusCode = StatusCode.GetOrDefault(context, () => HttpStatusCode.OK);
+ response.StatusCode = (int)statusCode;
// Add headers.
var headers = context.GetHeaders(ResponseHeaders);
@@ -110,7 +111,8 @@ public class WriteHttpResponse : Activity
response.ContentType = httpContent.Headers.ContentType?.ToString() ?? contentType;
// Write content.
- await httpContent.CopyToAsync(response.Body);
+ if(statusCode != HttpStatusCode.NoContent)
+ await httpContent.CopyToAsync(response.Body);
// Complete activity.
await context.CompleteActivityAsync();
diff --git a/src/modules/Elsa.Workflows.Core/Extensions/InputExtensions.cs b/src/modules/Elsa.Workflows.Core/Extensions/InputExtensions.cs
index fcdece0fd..a42731aa9 100644
--- a/src/modules/Elsa.Workflows.Core/Extensions/InputExtensions.cs
+++ b/src/modules/Elsa.Workflows.Core/Extensions/InputExtensions.cs
@@ -6,10 +6,48 @@ using Elsa.Workflows.Core.Models;
// ReSharper disable once CheckNamespace
namespace Elsa.Extensions;
+///
+/// Provides extensions on and
+///
public static class InputExtensions
{
- public static T? GetOrDefault(this Input? input, ActivityExecutionContext context) => context.Get(input);
- public static T? GetOrDefault(this Input? input, ExpressionExecutionContext context) => context.Get(input);
+ ///
+ /// Returns the value of the specified input, or a default value if the input is not found.
+ ///
+ public static T? GetOrDefault(this Input? input, ActivityExecutionContext context, Func? defaultValue = default)
+ {
+ var value = context.Get(input);
+ return value != null ? value : defaultValue != null ? defaultValue.Invoke() : default;
+ }
+
+ ///
+ /// Returns the value of the specified input, or a default value if the input is not found.
+ ///
+ public static T? GetOrDefault(this Input? input, ExpressionExecutionContext context, Func? defaultValue = default)
+ {
+ var value = context.Get(input);
+ return value != null ? value : defaultValue != null ? defaultValue.Invoke() : default;
+ }
+
+ ///
+ /// Returns the value of the specified input.
+ ///
+ /// The input.
+ /// The context.
+ /// The name of the input.
+ /// The type of the input.
+ /// The value of the specified input.
+ /// Throws an exception if the input is not found.
public static T Get(this Input? input, ActivityExecutionContext context, [CallerArgumentExpression("input")]string? inputName = default) => context.Get(input) ?? throw new Exception($"{inputName} is required.");
+
+ ///
+ /// Returns the value of the specified input.
+ ///
+ /// The input.
+ /// The context.
+ /// The name of the input.
+ /// The type of the input.
+ /// The value of the specified input.
+ /// Throws an exception if the input is not found.
public static T Get(this Input? input, ExpressionExecutionContext context, [CallerArgumentExpression("input")]string? inputName = default) => context.Get(input) ?? throw new Exception($"{inputName} is required.");
}
\ No newline at end of file