web-dev-qa-db-fra.com

Comment lire la chaîne de connexion dans .NET Core?

Je veux lire seulement une chaîne de connexion à partir d'un fichier de configuration et pour cela ajouter un fichier avec le nom "appsettings.json" à mon projet et ajouter ce contenu dessus:

{
"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-

 WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
    "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
   }
 }
}

Sur ASP.NET j'ai utilisé ceci:

 var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

Maintenant, comment puis-je lire "DefaultConnection" en C # et le stocker sur une variable de chaîne dans .NET Core?

81
motevalizadeh

Vous pouvez faire cela avec la méthode d'extension GetConnectionString:

string conString = Microsoft
   .Extensions
   .Configuration
   .ConfigurationExtensions
   .GetConnectionString(this.Configuration, "DefaultConnection");

System.Console.WriteLine(conString);

ou avec une classe structurée pour DI:

public class SmtpConfig
{
    public string Server { get; set; }
    public string User { get; set; }
    public string Pass { get; set; }
    public int Port { get; set; }
}

Commencez:

public IConfigurationRoot Configuration { get; }


// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // http://developer.telerik.com/featured/new-configuration-model-asp-net-core/
    // services.Configure<SmtpConfig>(Configuration.GetSection("Smtp"));
    Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<SmtpConfig>(services, Configuration.GetSection("Smtp"));

Et puis dans le home-controller:

public class HomeController : Controller
{

    public SmtpConfig SmtpConfig { get; }
    public HomeController(Microsoft.Extensions.Options.IOptions<SmtpConfig> smtpConfig)
    {
        SmtpConfig = smtpConfig.Value;
    } //Action Controller


    public IActionResult Index()
    {
        System.Console.WriteLine(SmtpConfig);
        return View();
    }

avec cela dans appsettings.json:

"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
},

"Smtp": {
    "Server": "0.0.0.1",
    "User": "[email protected]",
    "Pass": "123456789",
    "Port": "25"
  }
72
Stefan Steiger

La réponse postée est correcte mais ne répond pas directement à la même question que j'avais à propos de la lecture dans une chaîne de connexion. Après de nombreuses recherches, j'ai trouvé un moyen un peu plus simple de procéder.

Dans Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the whole configuration object here.
    services.AddSingleton<IConfiguration>(Configuration);
}

Dans votre contrôleur, ajoutez un champ pour la configuration et un paramètre pour celui-ci sur un constructeur.

private readonly IConfiguration configuration;

public HomeController(IConfiguration config) 
{
    configuration = config;
}

Maintenant, plus tard dans votre code de vue, vous pouvez y accéder comme ceci:

connectionString = configuration.GetConnectionString("DefaultConnection");
78
Brad Patton

Voir le lien pour plus d'informations: https://docs.Microsoft.com/en-us/ef/core/miscellaneous/connection-strings

JSON

    {
      "ConnectionStrings": {
        "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
      },
    }

C # Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}
13
markokstate

La façon dont j'ai trouvé pour résoudre ce problème était d'utiliser AddJsonFile dans un générateur au démarrage (ce qui lui permet de trouver la configuration stockée dans le fichier appsettings.json), puis de l'utiliser pour définir une variable privée _config.

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();
        _config = builder.Build();
    }

Et puis je pourrais définir la chaîne de configuration comme suit:

var connectionString = _config.GetConnectionString("DbContextSettings:ConnectionString"); 

C'est sur dotnet core 1.1

4
Alex White
0
Ivano Scifoni

j'ai une bibliothèque d'accès aux données qui fonctionne à la fois avec le noyau .net et le framework .net.

l'astuce consistait, dans les projets centraux .net, à conserver les chaînes de connexion dans un fichier xml nommé "app.config" (également pour les projets Web) et à le marquer comme "copie dans le répertoire de sortie",

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="conn1" connectionString="...." providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

ConfigurationManager.ConnectionStrings - lira la chaîne de connexion.

    var conn1 = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
0
shaig