首页 文章

如何在.NET Core中读取连接字符串?

提问于
浏览
56

我想从配置文件中只读取一个连接字符串,并为此添加一个名为“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;

现在我如何在C#中读取“DefaultConnection”并将其存储在.NET Core中的字符串变量中?

5 回答

  • 48

    您可以使用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; }
    }
    

    启动:

    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": "user@company.com",
        "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");
    
  • 4

    有关详细信息,请参阅链接: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")));
    }
    
  • 55

    我发现解决这个问题的方法是在Startup的构建器中使用AddJsonFile(允许它查找存储在appsettings.json文件中的配置),然后使用它来设置private _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上

相关问题