Подтвердить что ты не робот

Как читать строку подключения в .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?

4b9b3361

Ответ 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

Ответ 6

у меня есть библиотека доступа к данным, которая работает как с ядром .net, так и с платформой .net, уловка была в проектах ядра ядра .net, чтобы сохранить строки подключения в файле XML с именем "app.config" (также для веб-проектов) и пометить "Копировать в выходной каталог", ConfigurationManager.ConnectionStrings - будет читать строку подключения.