代码之家  ›  专栏  ›  技术社区  ›  Dheeraj Kumar

ASP.NET核心2.1 Web API-配置管理器.ConnectionStrings返回空[重复]

  •  0
  • Dheeraj Kumar  · 技术社区  · 6 年前

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

    0 回复  |  直到 6 年前
        1
  •  92
  •   Aran Mulholland JohnnyAce    7 年前

    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
  •  106
  •   Brad Patton    7 年前

    在启动.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
  •  18
  •   markokstate    7 年前

    更多信息请参见链接: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings

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

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BloggingContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
    }
    
        4
  •  6
  •   Alex White    8 年前

    我发现解决这个问题的方法是在启动时在构建器中使用AddJsonFile(它允许它找到存储在appsettings.json应用程序设置文件),然后使用它设置私有配置变量

    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 core 1.1上的

        5
  •  1
  •   antonpv    4 年前

    ASP.NET核心 ( 3.1款 )为我们提供 ,因此您可以简单地添加以下构造函数:

    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        private readonly IConfiguration m_config;
    
        public TestController(IConfiguration config)
        {
            m_config = config;
        }
    
        [HttpGet]
        public string Get()
        {
            //you can get connection string as follows
            string connectionString = m_config.GetConnectionString("Default")
        }
    }
    

    {
        "ConnectionStrings": {
            "Default": "YOUR_CONNECTION_STRING"
            }
    }
    
        6
  •  0
  •   shaig    5 年前

    我有一个数据访问库,它可以与.net核心和.net框架一起工作。

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

    配置管理器.ConnectionStrings-将读取连接字符串。

        var conn1 = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
    
        7
  •  0
  •   NoWar    5 年前

    还有另一种方法。在我的示例中,您可以在repository类中看到一些业务逻辑,我在ASP.netmvccore3.1中使用了依赖注入。

    我想在这里 connectiongString

    此模式允许您在同一个业务逻辑存储库中访问不同的数据库。

    public interface IStatsRepository
    {
                IEnumerable<FederalDistrict> FederalDistricts();
    }
    
    class StatsRepository : IStatsRepository
    {
       private readonly DbContextOptionsBuilder<EFCoreTestContext>
                    optionsBuilder = new DbContextOptionsBuilder<EFCoreTestContext>();
       private readonly IConfigurationRoot configurationRoot;
    
       public StatsRepository()
       {
           IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
           configurationRoot = configurationBuilder.Build();
       }
    
       public IEnumerable<FederalDistrict> FederalDistricts()
       {
            var conn = configurationRoot.GetConnectionString("EFCoreTestContext");
            optionsBuilder.UseSqlServer(conn);
    
            using (var ctx = new EFCoreTestContext(optionsBuilder.Options))
            { 
                return ctx.FederalDistricts.Include(x => x.FederalSubjects).ToList();
            }
        }
    }
    

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ConnectionStrings": {
        "EFCoreTestContext": "Data Source=DESKTOP-GNJKL2V\\MSSQLSERVER2014;Database=Test;Trusted_Connection=True;MultipleActiveResultSets=true"
      }
    }
    
    推荐文章