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
- Only pass AzureEventHubsRole.AzureEventHubsDataOwner, AzureEventHubsDataReceiver, or AzureEventHubsDataSender
- Use Enum.IsDefined to validate any enum value parsed from external input before calling
- 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
- Never cast integers to the role enum without Enum.IsDefined
- Keep role mappings version-aligned across packages
- Use the strongly typed AzureEventHubsRole constants only
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
- 'ownerResource' and 'identityResource' must both be null…
- ' ' is not a valid value.
- ' ' is not a valid value.
- Address prefix must be a string or a parameter resource…
- Address prefix must be omitted, a string, or a parameter…
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)