elsa-workflows/elsa-core · error · Exception

No input with name could be found

Error message

No input with name {inputName} could be found

What it means

Thrown by EvaluateInputPropertyAsync when the activity descriptor was found but has no input descriptor matching the requested inputName. The registry knows the activity type, but the requested input property does not exist on it.

Solutions

  1. Correct the inputName to match the Input descriptor's Name exactly (same casing).
  2. Inspect activityDescriptor.Inputs to list valid input names before calling.
  3. If the property was renamed, update workflow definitions/designer bindings to the new name.
  4. Check whether the input should be resolved via the wrapped input property (GetWrappedInputPropertyDescriptor) and that it is declared on the activity.

Example fix

// before
await context.EvaluateInputPropertyAsync("Resultt"); // typo

// after
var names = activityDescriptor.Inputs.Select(i => i.Name); // verify first
await context.EvaluateInputPropertyAsync(nameof(MyActivity.Result));
Defensive patterns

Strategy: validation

Validate before calling

var inputNames = activityDescriptor.Inputs.Select(i => i.Name).ToHashSet(StringComparer.Ordinal);
if (!inputNames.Contains(inputName))
    throw new ArgumentException($"Unknown input '{inputName}'. Valid: {string.Join(", ", inputNames)}");

Prevention

When it happens

Trigger: Calling EvaluateInputPropertyAsync("SomeInput") where SomeInput is not a declared Input descriptor on the activity type (typo, renamed property, input declared on a different activity, or wrapped input descriptor removed).

Common situations: Renaming an Input property in a custom activity while workflows or designer code still reference the old name; passing the property name instead of the descriptor Name; casing mismatches; calling on base-type-only inputs that are not wrapped.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of elsa-workflows/elsa-core@fe9217bdfa (2026-09-13). Data as JSON: /api/errors/2aee344f21c814ea. Report an issue: GitHub.

Appendix: source

Thrown at src/modules/Elsa.Workflows.Core/Extensions/ActivityExecutionContextExtensions.InputEvaluation.cs:53

        public async Task<T?> EvaluateInputPropertyAsync<TActivity, T>(Expression<Func<TActivity, Input<T>>> propertyExpression)
        {
            var inputName = propertyExpression.GetProperty()!.Name;
            var input = await EvaluateInputPropertyAsync(context, inputName);
            return input.ConvertTo<T>();
        }

        /// <summary>
        /// Evaluates a specific input property of the activity.
        /// </summary>
        public async Task<object?> EvaluateInputPropertyAsync(string inputName)
        {
            var activity = context.Activity;
            var activityRegistryLookup = context.GetRequiredService<IActivityRegistryLookupService>();
            var activityDescriptor = await activityRegistryLookup.FindAsync(activity.Type) ?? throw new Exception("Activity descriptor not found");
            var inputDescriptor = activityDescriptor.GetWrappedInputPropertyDescriptor(activity, inputName);

            if (inputDescriptor == null)
                throw new Exception($"No input with name {inputName} could be found");

            return await EvaluateInputPropertyAsync(context, activityDescriptor, inputDescriptor);
        }

        /// <summary>
        /// Evaluates the specified input and sets the result in the activity execution context's memory space.
        /// </summary>
        /// <param name="input">The input to evaluate.</param>
        /// <typeparam name="T">The type of the input.</typeparam>
        /// <returns>The evaluated value.</returns>
        public async Task<T?> EvaluateAsync<T>(Input<T> input)
        {
            var evaluator = context.GetRequiredService<IExpressionEvaluator>();
            var memoryBlockReference = input.MemoryBlockReference();
            var value = await evaluator.EvaluateAsync(input, context.ExpressionExecutionContext);
            memoryBlockReference.Set(context, value);
            return value;
        }

View on GitHub (pinned to fe9217bdfa)