defaultconnection - get connection string c# asp net core
¿Cómo leer la cadena de conexión en.NET Core? (6)
Quiero leer solo una cadena de conexión de un archivo de configuración y para esto agregar un archivo con el nombre "appsettings.json" a mi proyecto y agregar este contenido:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)//mssqllocaldb;Database=aspnet-
WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
En ASP.NET usé esto:
var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
Ahora, ¿cómo puedo leer "DefaultConnection" en C # y almacenarlo en una variable de cadena en .NET Core?
Consulte el enlace para obtener más información: 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")));
}
La forma en que encontré para resolver esto fue usar AddJsonFile en un generador en el Inicio (que le permite encontrar la configuración almacenada en el archivo appsettings.json) y luego usarla para establecer una variable privada _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();
}
Y luego podría establecer la cadena de configuración de la siguiente manera:
var connectionString = _config.GetConnectionString("DbContextSettings:ConnectionString");
Esto está en dotnet core 1.1
La respuesta publicada está bien, pero no respondió directamente la misma pregunta que tenía sobre leer en una cadena de conexión. A través de muchas búsquedas, encontré una forma un poco más simple de hacer esto.
En Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
// Add the whole configuration object here.
services.AddSingleton<IConfiguration>(Configuration);
}
En su controlador, agregue un campo para la configuración y un parámetro para él en un constructor
private readonly IConfiguration configuration;
public HomeController(IConfiguration config)
{
configuration = config;
}
Ahora más adelante en su código de vista puede acceder a él como:
connectionString = configuration.GetConnectionString("DefaultConnection");
Puede hacer esto con el método de extensión GetConnectionString:
string conString = Microsoft
.Extensions
.Configuration
.ConfigurationExtensions
.GetConnectionString(this.Configuration, "DefaultConnection");
System.Console.WriteLine(conString);
o con una clase estructurada para DI:
public class SmtpConfig
{
public string Server { get; set; }
public string User { get; set; }
public string Pass { get; set; }
public int Port { get; set; }
}
Puesta en marcha:
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"));
Y luego en el controlador de inicio:
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();
}
con esto en 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"
}
Puede usar el método de extensión de configuración: getConnectionString ("DefaultConnection")
Tengo una biblioteca de acceso a datos que funciona con .net core y .net framework.
el truco estaba en los proyectos principales de .net para mantener las cadenas de conexión en un archivo xml llamado "app.config" (también para proyectos web) y marcarlo como ''copiar al directorio de salida'',
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="conn1" connectionString="...." providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
ConfigurationManager.ConnectionStrings: leerá la cadena de conexión.
var conn1 = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;