{"record":{"id":"f02e7747e61470e3","repo":"microsoft/aspire","slug":"invalid-event-hubs-role-roles-i","errorCode":null,"errorMessage":"Invalid Event Hubs role: {roles[i]}.","messagePattern":"Invalid Event Hubs role: (.+?)\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs","lineNumber":561,"sourceCode":"        this IResourceBuilder<T> builder,\n        IResourceBuilder<AzureEventHubsResource> target,\n        params AzureEventHubsRole[] roles)\n        where T : IResource\n    {\n        if (roles is null || roles.Length == 0)\n        {\n            return builder.WithRoleAssignments(target, Array.Empty<EventHubsBuiltInRole>());\n        }\n\n        var builtInRoles = new EventHubsBuiltInRole[roles.Length];\n        for (var i = 0; i < roles.Length; i++)\n        {\n            builtInRoles[i] = roles[i] switch\n            {\n                AzureEventHubsRole.AzureEventHubsDataOwner => EventHubsBuiltInRole.AzureEventHubsDataOwner,\n                AzureEventHubsRole.AzureEventHubsDataReceiver => EventHubsBuiltInRole.AzureEventHubsDataReceiver,\n                AzureEventHubsRole.AzureEventHubsDataSender => EventHubsBuiltInRole.AzureEventHubsDataSender,\n                _ => throw new ArgumentException($\"Invalid Event Hubs role: {roles[i]}.\", nameof(roles))\n            };\n        }\n\n        return builder.WithRoleAssignments(target, builtInRoles);\n    }\n}\n","sourceCodeStart":543,"sourceCodeEnd":568,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs#L543-L568","documentation":"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.","triggerScenarios":"Passing an undefined or out-of-range AzureEventHubsRole enum value to WithRoleAssignments, or casting an integer that doesn't map to a defined member.","commonSituations":"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.","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"],"exampleFix":"// before\nvar roles = new[] { (AzureEventHubsRole)42 };\nbuilder.WithRoleAssignments(hub, roles);\n// after\nvar role = (AzureEventHubsRole)42;\nif (Enum.IsDefined(role))\n{\n    builder.WithRoleAssignments(hub, new[] { role });\n}","handlingStrategy":"validation","validationCode":"foreach (var r in roles)\n{\n    if (!Enum.IsDefined(r)) throw new ArgumentOutOfRangeException(nameof(roles), $\"Unsupported Event Hubs role: {r}\");\n}","typeGuard":"static bool IsSupportedEventHubsRole(AzureEventHubsRole role) => role is\n    AzureEventHubsRole.AzureEventHubsDataOwner or\n    AzureEventHubsRole.AzureEventHubsDataReceiver or\n    AzureEventHubsRole.AzureEventHubsDataSender;","tryCatchPattern":"try { builder.WithRoleAssignments(hub, roles); }\ncatch (ArgumentException ex) when (ex.ParamName == nameof(roles)) { /* drop or remap the invalid role */ }","preventionTips":["Never cast integers to the role enum without Enum.IsDefined","Keep role mappings version-aligned across packages","Use the strongly typed AzureEventHubsRole constants only"],"tags":["eventhubs","role-assignment","enum","argument-validation"],"backgroundTag":"invalid-enum-argument","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T09:17:21.228Z"}