dotnetcore/CAP · error · ArgumentNullException
Value cannot be null. (Parameter 'connectionString')
Error message
Value cannot be null. (Parameter 'connectionString')
What it means
The string-based UseAzureServiceBus overload requires a connection string to configure the Service Bus transport. Passing a null string throws ArgumentNullException before any options extension is registered, since the transport cannot connect without it.
Solutions
- Provide a valid connection string: options.UseAzureServiceBus("Endpoint=sb://....servicebus.windows.net/;SharedAccessKeyName=...;SharedAccessKey=...")
- Throw a clear startup error if config is missing: var cs = config["ASB:CS"] ?? throw new InvalidOperationException("Azure Service Bus connection string missing")
- Use the namespace-based overload UseAzureServiceBus(namespace, credential) when you have managed identity instead of a connection string
- Verify appsettings/environment configuration is loaded before building the host
Example fix
// before
options.UseAzureServiceBus(Configuration["AzureServiceBus:ConnectionString"]!); // null in prod
// after
var cs = Configuration.GetConnectionString("AzureServiceBus") ?? throw new InvalidOperationException("Azure Service Bus connection string is not configured.");
options.UseAzureServiceBus(cs); Defensive patterns
Strategy: validation
Validate before calling
var cs = configuration["AzureServiceBus:ConnectionString"]; if (string.IsNullOrWhiteSpace(cs)) throw new InvalidOperationException("Azure Service Bus connection string is required"); Type guard
bool HasConnectionString(string? s) => !string.IsNullOrWhiteSpace(s);
Try / catch
try { options.UseAzureServiceBus(cs); } catch (ArgumentNullException ex) when (ex.ParamName == "connectionString") { logger.LogCritical(ex, "ASB connection string missing"); throw; } Prevention
- Validate required config keys at host startup (hostBuilder settings validation)
- Keep connection strings in user-secrets/env vars per environment and assert presence in CI
When it happens
Trigger: Calling options.UseAzureServiceBus(null) — typically the connection string comes from configuration (appsettings/env var) that is missing, or Configuration["AzureServiceBus:ConnectionString"] returned null.
Common situations: Missing AzureServiceBus connection string in appsettings.json per environment; env var not set in CI/container; user-secrets not configured locally; key-vault reference that failed to resolve to a value.
Related errors
- Value cannot be null. (Parameter 'topicNames')
- Value cannot be null. (Parameter 'options')
- Value cannot be null. (Parameter 'topics')
- Value cannot be null. (Parameter 'configure')
- Either connection string or namespace are required.
AI-assisted analysis of dotnetcore/CAP@e52b8508e5 (2026-09-14).
Data as JSON: /api/errors/2013585a177d86ce.
Report an issue: GitHub.
Appendix: source
Thrown at src/DotNetCore.CAP.AzureServiceBus/CAP.Options.Extensions.cs:19
// Copyright (c) .NET Core Community. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
using System;
using DotNetCore.CAP;
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.DependencyInjection;
public static class CapOptionsExtensions
{
/// <summary>
/// Configuration to use Azure Service Bus in CAP.
/// </summary>
/// <param name="options">CAP configuration options</param>
/// <param name="connectionString">Connection string for namespace or the entity.</param>
public static CapOptions UseAzureServiceBus(this CapOptions options, string connectionString)
{
if (connectionString == null) throw new ArgumentNullException(nameof(connectionString));
return options.UseAzureServiceBus(opt => { opt.ConnectionString = connectionString; });
}
/// <summary>
/// Configuration to use Azure Service Bus in CAP.
/// </summary>
/// <param name="options">CAP configuration options</param>
/// <param name="configure">Provides programmatic configuration for the Azure Service Bus.</param>
public static CapOptions UseAzureServiceBus(this CapOptions options, Action<AzureServiceBusOptions> configure)
{
if (configure == null) throw new ArgumentNullException(nameof(configure));
options.RegisterExtension(new AzureServiceBusOptionsExtension(configure));
return options;
}
}View on GitHub (pinned to e52b8508e5)