{"record":{"id":"aba364a6ca8dd4e2","repo":"microsoft/aspire","slug":"access-policy-policyname-is-already-registered-on-connector","errorCode":null,"errorMessage":"Access policy '{policyName}' is already registered on connector connection '{connection.Name}'.","messagePattern":"Access policy '(.+?)' is already registered on connector connection '(.+?)'\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure.ConnectorNamespace/AzureConnectorNamespaceExtensions.cs","lineNumber":678,"sourceCode":"        AzureConnectorNamespaceConnectionResource connection,\n        string name,\n        string policyName)\n    {\n        var resourceName = ConnectorNamespaceBicepIdentifiers.CreateAccessPolicy(\n            connection.Parent.Name,\n            connection.Name,\n            name);\n        if (connection.AccessPolicies.Any(policy =>\n            string.Equals(policy.BicepIdentifier, resourceName, StringComparison.OrdinalIgnoreCase)))\n        {\n            throw new InvalidOperationException(\n                $\"Access policy resource '{name}' is already registered on connector connection '{connection.Name}'.\");\n        }\n\n        if (connection.AccessPolicies.Any(policy =>\n            string.Equals(policy.PolicyName, policyName, StringComparison.OrdinalIgnoreCase)))\n        {\n            throw new InvalidOperationException(\n                $\"Access policy '{policyName}' is already registered on connector connection '{connection.Name}'.\");\n        }\n\n        return resourceName;\n    }\n\n    private static string GetValidatedMcpAccessPolicyResourceName(\n        AzureConnectorNamespaceMcpServerConfigResource config,\n        string name,\n        string objectId)\n    {\n        var resourceName = ConnectorNamespaceBicepIdentifiers.CreateMcpAccessPolicy(\n            config.Parent.Name,\n            config.Name,\n            name);\n        if (config.AccessPolicies.Any(policy =>\n            string.Equals(policy.BicepIdentifier, resourceName, StringComparison.OrdinalIgnoreCase)))\n        {","sourceCodeStart":660,"sourceCodeEnd":696,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure.ConnectorNamespace/AzureConnectorNamespaceExtensions.cs#L660-L696","documentation":"Each access policy on a connector connection must have a unique policy name. GetValidatedAccessPolicyResourceName throws this InvalidOperationException when a policy with the same PolicyName (case-insensitive) is already registered on the connection.","triggerScenarios":"Calling WithAccessPolicy twice on the same connector connection where both policies resolve to the same policy name, even if the resource names differ.","commonSituations":"Registering the same Entra principal under two resource names; a shared helper that derives identical policy names for repeated calls; copy-pasted builder code.","solutions":["Use a distinct policy name for the new policy.","Remove the duplicate WithAccessPolicy call.","Guard with a check of existing policy names before adding."],"exampleFix":"// before\nconnection.WithAccessPolicy(\"p1\", objectId, tenantId, PrincipalType.User);\nconnection.WithAccessPolicy(\"p2\", objectId, tenantId, PrincipalType.User); // same resolved policyName\n// after\nconnection.WithAccessPolicy(\"p1\", objectId, tenantId, PrincipalType.User);","handlingStrategy":"validation","validationCode":"if (connection.AccessPolicies.Any(p => string.Equals(p.PolicyName, policyName, StringComparison.OrdinalIgnoreCase)))\n{\n    // policy already present; skip the call\n}","typeGuard":null,"tryCatchPattern":"try { connection.WithAccessPolicy(name, objectId, tenantId, principalType); }\ncatch (InvalidOperationException ex) when (ex.Message.StartsWith(\"Access policy '\"))\n{\n    // skip duplicate or pick another policy name\n}","preventionTips":["Do not register the same principal under multiple policy names.","Centralize policy registration to avoid duplicates.","Check existing policies before adding."],"tags":["azure","connector","access-policy","duplicate"],"backgroundTag":"file-already-exists","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}