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
}
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");
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"];
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")
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
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")));
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é.
Vous devez changer votre appsetting.json
to:
{
"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");