microsoft/aspire · error · ArgumentException

Invalid Event Hubs role

Error message

Invalid Event Hubs role: {roles[i]}.

What it means

WithRoleAssignments accepts only the three supported Event Hubs roles (DataOwner, DataReceiver, DataSender). Any other AzureEventHubsRole value falls through the switch and throws ArgumentException naming the offending role.

Solutions

  1. Only pass AzureEventHubsRole.AzureEventHubsDataOwner, AzureEventHubsDataReceiver, or AzureEventHubsDataSender
  2. Use Enum.IsDefined to validate any enum value parsed from external input before calling
  3. Check that all projects referencing the role enum use the same package version

Example fix

// before
var roles = new[] { (AzureEventHubsRole)42 };
builder.WithRoleAssignments(hub, roles);
// after
var role = (AzureEventHubsRole)42;
if (Enum.IsDefined(role))
{
    builder.WithRoleAssignments(hub, new[] { role });
}
Defensive patterns

Strategy: validation

Validate before calling

foreach (var r in roles)
{
    if (!Enum.IsDefined(r)) throw new ArgumentOutOfRangeException(nameof(roles), $"Unsupported Event Hubs role: {r}");
}

Type guard

static bool IsSupportedEventHubsRole(AzureEventHubsRole role) => role is
    AzureEventHubsRole.AzureEventHubsDataOwner or
    AzureEventHubsRole.AzureEventHubsDataReceiver or
    AzureEventHubsRole.AzureEventHubsDataSender;

Try / catch

try { builder.WithRoleAssignments(hub, roles); }
catch (ArgumentException ex) when (ex.ParamName == nameof(roles)) { /* drop or remap the invalid role */ }

Prevention

When it happens

Trigger: Passing an undefined or out-of-range AzureEventHubsRole enum value to WithRoleAssignments, or casting an integer that doesn't map to a defined member.

Common situations: Enum value read from configuration/JSON and cast to the enum without validation; a library version mismatch where one side defines a role the other doesn't; generic role-mapping code that applies CosmosDB/Storage roles to Event Hubs.

Understand the failure class

Background: "invalid argument", "unknown mode", "not supported": invalid enum-like argument errors explained — this error's family across 19 libraries.

Related errors


AI-assisted analysis of microsoft/aspire@25830f84bd (2026-09-16). Data as JSON: /api/errors/f02e7747e61470e3. Report an issue: GitHub.

Appendix: source

Thrown at src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs:561

        this IResourceBuilder<T> builder,
        IResourceBuilder<AzureEventHubsResource> target,
        params AzureEventHubsRole[] roles)
        where T : IResource
    {
        if (roles is null || roles.Length == 0)
        {
            return builder.WithRoleAssignments(target, Array.Empty<EventHubsBuiltInRole>());
        }

        var builtInRoles = new EventHubsBuiltInRole[roles.Length];
        for (var i = 0; i < roles.Length; i++)
        {
            builtInRoles[i] = roles[i] switch
            {
                AzureEventHubsRole.AzureEventHubsDataOwner => EventHubsBuiltInRole.AzureEventHubsDataOwner,
                AzureEventHubsRole.AzureEventHubsDataReceiver => EventHubsBuiltInRole.AzureEventHubsDataReceiver,
                AzureEventHubsRole.AzureEventHubsDataSender => EventHubsBuiltInRole.AzureEventHubsDataSender,
                _ => throw new ArgumentException($"Invalid Event Hubs role: {roles[i]}.", nameof(roles))
            };
        }

        return builder.WithRoleAssignments(target, builtInRoles);
    }
}

View on GitHub (pinned to 25830f84bd)