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

  1. Provide a valid connection string: options.UseAzureServiceBus("Endpoint=sb://....servicebus.windows.net/;SharedAccessKeyName=...;SharedAccessKey=...")
  2. Throw a clear startup error if config is missing: var cs = config["ASB:CS"] ?? throw new InvalidOperationException("Azure Service Bus connection string missing")
  3. Use the namespace-based overload UseAzureServiceBus(namespace, credential) when you have managed identity instead of a connection string
  4. 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

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


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)