Как читать строку подключения в .NET Core?
Я хочу прочитать только строку подключения из файла конфигурации и для этого добавить файл с именем "appsettings.json" в мой проект и добавить в него следующее содержимое:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-
WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
На ASP.NET я использовал это:
var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
Теперь, как я могу прочитать "DefaultConnection" в С# и сохранить его в строковой переменной в .NET Core?
Ответы
Ответ 1
Вы можете сделать это с помощью метода расширения GetConnectionString:
string conString = Microsoft
.Extensions
.Configuration
.ConfigurationExtensions
.GetConnectionString(this.Configuration, "DefaultConnection");
System.Console.WriteLine(conString);
или со структурированным классом для DI:
public class SmtpConfig
{
public string Server { get; set; }
public string User { get; set; }
public string Pass { get; set; }
public int Port { get; set; }
}
Startup:
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"));
И затем в домашнем контроллере:
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();
}
с этим в 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"
}
Ответ 2
Опубликованный ответ в порядке, но напрямую не ответил на тот же вопрос, который я читал в строке подключения. Благодаря многому поиску я нашел несколько более простой способ сделать это.
В Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
// Add the whole configuration object here.
services.AddSingleton<IConfiguration>(Configuration);
}
В вашем контроллере добавьте поле для конфигурации и параметр для него в конструкторе
private readonly IConfiguration configuration;
public HomeController(IConfiguration config)
{
configuration = config;
}
Теперь в вашем коде просмотра вы можете получить к нему доступ, например:
connectionString = configuration.GetConnectionString("DefaultConnection");
Ответ 3
См. Ссылку для получения дополнительной информации: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings
JSON
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
С# Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BloggingContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}
Ответ 4
То, что я нашел для этого, это использовать AddJsonFile в построителе при запуске (который позволяет ему найти конфигурацию, хранящуюся в файле appsettings.json), а затем использовать ее для установки частной переменной _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();
}
И тогда я могу установить строку конфигурации следующим образом:
var connectionString = _config.GetConnectionString("DbContextSettings:ConnectionString");
Это находится в ядре dotnet 1.1
Ответ 5
Вы можете использовать способ расширения конфигурации: getConnectionString ( "DefaultConnection" )
https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/Extensions/Configuration/ConfigurationExtensions/index.html#Microsoft.Extensions.Configuration.ConfigurationExtensions.GetConnectionString
Ответ 6
у меня есть библиотека доступа к данным, которая работает как с ядром .net, так и с платформой .net, уловка была в проектах ядра ядра .net, чтобы сохранить строки подключения в файле XML с именем "app.config" (также для веб-проектов) и пометить "Копировать в выходной каталог", ConfigurationManager.ConnectionStrings - будет читать строку подключения.