web-dev-qa-db-de.com

Der Wert kann nicht Null sein. Parametername: connectionString appsettings.json im Starter

Ich versuche, meine Verbindungszeichenfolge in meine appsettings.json-Datei zu schreiben und in meine Startdatei zu bringen, aber ich bekomme immer einen Wert, der nicht null sein kann .. _. Parametername: connectionString. Ich habe verschiedene Beispiele verwendet, aber ich kann dieses neue Setup nicht mit der Startklasse von ASP.NET 1.0 Core sehen. 

Appsetting.json-Datei:

{
"Data": {
"DefaultConnection": {
  "ConnectionString": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"

},
"Logging": {
  "IncludeScopes": false,
  "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
  }
}
}
}

Methode versucht Startup.cs

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

 public void ConfigureServices(IServiceCollection services)
    {
        var connStr = Configuration.GetConnectionString("DefaultConnection");
        System.Console.WriteLine(connStr);
        services.AddDbContext<DbContext>(options => options.UseSqlServer(connStr)); //error right here -- Null value
}
11
epv

Vor allem die 

 "Data": {
"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
}

Unterscheidet sich geringfügig von der Struktur, die Sie erhalten, wenn Sie in Visual Studio eine "Asp.NET-Konfigurationsdatei" hinzufügen. Wenn Sie das tun, bekommen Sie 

"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},

ohne das "App" JavaScript-Objekt. Deshalb funktioniert die Erweiterungsmethode nicht. Sie erwartet diese Struktur. Du kannst diese Struktur (die mit "App") trotzdem verwenden und bekommst die Verbindungszeichenfolge so:

var connectionString = Configuration["App::ConnectionStrings:DefaultConnection"];

Beachten Sie, dass Sie im JavaScript-Objektbaum mit ':' anstelle von '.' Navigieren. Bei einigen plattformübergreifenden Problemen mit der Verwendung des '.' 

Wenn Sie die "App": {} herausarbeiten, können Sie Folgendes tun:

var connectionString = Configuration["ConnectionStrings:DefaultConnection"];

Nun funktioniert die Erweiterungsmethode. Unter den Abdeckungen ist derselbe Code wie oben angegeben.

var config2 = Configuration.GetConnectionString("DefaultConnection");
15
GlennSills

DefaultConnection ist das innere Objekt in der Json-Struktur und das untergeordnete Objekt von Data.

Wenn Sie also genau mit Ihrer Konfigurationsdatei sein möchten, können Sie sie verwenden

var connStr = Configuration.GetSection("Data")
                           .GetSection("DefaultConnection")["ConnectionString"];
1
Rudis

Ich habe den Buchstaben 's' nach dem ConnectionString-Eigenschaftennamen in der appsettings.json vermisst, wenn ich Configuration.GetConnectionString("name") verwende.

 enter image description here

Wenn Sie kopieren möchten

"ConnectionStrings ": {
  "SpyStore": "Server=(localdb)\\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}

Der Methodenwortlaut GetConnectionString hat mich verwirrt, ich schwebte darüber und ach halt, es suchte nach ConnectionStrings Eigenschaftsname statt ConnectionString

0
StefanJM

dies war die Nachricht, die mir erschien

Der Wert darf nicht null sein . Parametername: connectionString

Ich korrigiere es geändert beim Start dieser Zeilen

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration["Data:BookStoreContext:ConnectionString"]));

Zu

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("BookStoreContext")));
0
Douglas Loaiza

Ich hatte einen ähnlichen Fehler. Meine "appsettings.json" -Datei wurde nicht geladen, weil die Eigenschaften der Datei In Ausgabeverzeichnis kopieren -> Nicht kopieren waren. Ich habe das so eingestellt, dass Kopieren immer speichern und neu erstellen. Es hat funktioniert.

Sie müssen Ihren appsetting.jsonto ändern:

    {
  "Data": {
    "ConnectionStrings": {
      "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"

    },
    "Logging": {
      "IncludeScopes": false,
      "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information"
      }
    }
  }
}

Und jetzt wird es funktionieren:

  var connStr = Configuration.GetConnectionString("DefaultConnection");
0
M. Wiśnicki