{"record":{"id":"1ba4847b086407b8","repo":"OrchardCMS/OrchardCore","slug":"unable-to-create-a-safe-index-prefix-for-ai-search-attempted","errorCode":null,"errorMessage":"Unable to create a safe index prefix for AI Search. Attempted to created a safe name using '{safePrefix}'.","messagePattern":"Unable to create a safe index prefix for AI Search\\. Attempted to created a safe name using '(.+?)'\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/OrchardCore/OrchardCore.AzureAI.Core/Services/AzureAISearchIndexNameProvider.cs","lineNumber":43,"sourceCode":"        return GetIndexPrefix() + '-' + indexName;\n    }\n\n    private string GetIndexPrefix()\n    {\n        var prefix = _shellSettings.Name.ToLowerInvariant();\n        var azureAIOptions = _azureAIOptions.CurrentValue;\n\n        if (!string.IsNullOrWhiteSpace(azureAIOptions.IndexesPrefix))\n        {\n            prefix = $\"{azureAIOptions.IndexesPrefix.ToLowerInvariant()}-{prefix}\";\n        }\n\n        if (AzureAISearchIndexNamingHelper.TryGetSafePrefix(prefix, out var safePrefix))\n        {\n            return safePrefix;\n        }\n\n        throw new InvalidOperationException($\"Unable to create a safe index prefix for AI Search. Attempted to created a safe name using '{safePrefix}'.\");\n    }\n}\n","sourceCodeStart":25,"sourceCodeEnd":46,"githubUrl":"https://github.com/OrchardCMS/OrchardCore/blob/4306c0717fe573f6fca1b4955909ddab6a192807/src/OrchardCore/OrchardCore.AzureAI.Core/Services/AzureAISearchIndexNameProvider.cs#L25-L46","documentation":"Azure AI Search index names must be lowercase alphanumeric with hyphens, so the index name provider sanitizes the tenant/prefix using AzureAISearchIndexNamingHelper.TryGetSafePrefix. When no safe prefix can be derived (e.g., empty or entirely invalid input), this InvalidOperationException is thrown.","triggerScenarios":"Calling GetIndexPrefix (via GetFullIndexName) with a prefix that yields an empty or invalid safe name — typically an empty, null, or all-invalid-character prefix.","commonSituations":"Tenant names or configured index prefixes containing characters invalid for Azure AI Search; missing prefix configuration on a new tenant; whitespace-only prefix values in settings.","solutions":["Set a valid, non-empty index prefix (lowercase letters, digits, hyphens) in the Azure AI Search settings","Fix the tenant name used to derive the prefix so it sanitizes to a non-empty safe string","Provide an explicit index name prefix in configuration instead of relying on auto-derivation"],"exampleFix":"// before\nprefix: \"My Tenant!\"\n// after\nprefix: \"my-tenant\"","handlingStrategy":"validation","validationCode":"bool prefixOk = !string.IsNullOrWhiteSpace(prefix) && AzureAISearchIndexNamingHelper.TryGetSafePrefix(prefix, out _);","typeGuard":"bool hasSafePrefix = AzureAISearchIndexNamingHelper.TryGetSafePrefix(prefix, out var safe) && safe.Length > 0;","tryCatchPattern":"try { prefix = GetIndexPrefix(tenant); } catch (InvalidOperationException ex) when (ex.Message.Contains(\"safe index prefix\")) { /* fall back to a configured default prefix */ }","preventionTips":["Configure valid prefixes (lowercase alphanumerics/hyphens)","Use tenant names that sanitize safely","Provide a default fallback prefix in settings"],"tags":["azure-ai-search","naming","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"4306c0717fe573f6fca1b4955909ddab6a192807","analyzedAt":"2026-09-13T17:41:05.024Z","contentChangedAt":"2026-09-13T17:41:05.024Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}