web-dev-qa-db-fra.com

La valeur ne peut pas être nulle. Nom du paramètre: connectionString appsettings.json dans le démarreur

J'essaie d'écrire ma chaîne de connexion dans mon fichier appsettings.json et de l'introduire dans mon fichier de démarrage, mais je continue à obtenir une valeur qui ne peut pas être null. J'ai utilisé divers exemples, mais je n'arrive pas à voir cette nouvelle installation avec la classe de démarrage ASP.NET 1.0 Core. 

Fichier Appsetting.json:

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

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

Méthode essayant 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

Tout d'abord, le 

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

Est légèrement différente de la structure que vous obtenez lorsque vous ajoutez un "fichier de configuration Asp.NET" dans Visual Studio. Quand vous faites cela, vous obtenez 

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

sans l'objet JavaScript "App". C'est pourquoi la méthode d'extension ne fonctionne pas. Il attend cette structure. Vous pouvez quand même utiliser cette structure (celle avec "App") et vous obtenir une chaîne de connexion comme ceci:

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

Notez que vous naviguez dans l'arborescence d'objets JavaScript en utilisant ':' au lieu de '.'. Cela concerne certains problèmes multi-plateformes liés à l'utilisation du '.'. 

Si vous éditez "l'App": {} vous pouvez faire ceci:

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

Maintenant, la méthode d'extension fonctionnera. Sous les couvertures, c'est la même chose que le code ci-dessus.

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

DefaultConnection est l'objet interne de la structure json et l'enfant de l'objet Data.

Donc, si vous voulez être précis avec votre fichier de configuration, vous pouvez utiliser

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

Il me manquait la lettre 's après le nom de la propriété ConnectionString dans le fichier appsettings.json lors de l'utilisation de Configuration.GetConnectionString("name")

 enter image description here

Si vous voulez copier

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

Le libellé de la méthode GetConnectionString m'a confondu, je l'ai survolé et oh qu'il soit tenu, il recherchait le nom de la propriété ConnectionStrings au lieu de ConnectionString

0
StefanJM

c'est le message qui m'est apparu

La valeur ne peut pas être null . Nom du paramètre: connectionString

Je résous le changement dans le démarrage de ces lignes

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

À

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

J'avais une erreur similaire. Mon fichier "appsettings.json" ne se chargeait pas car ses propriétés étaient Copier dans le répertoire de sortie -> Ne pas copier. J'ai mis cela sur Copier, toujours sauvegarder et reconstruire. Cela a fonctionné.

0

Vous devez changer votre appsetting.jsonto:

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

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

Et maintenant travaillera:

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