访问ASP.NET核心控制器内的连接字符串

Van*_*nel 6 c# configuration asp.net-core

我正在使用C#和.NET Framework 4.7开发ASP.NET Core 2.0.2 Web API.

我想从appsettings.json方法的控制器中获取连接字符串.

我是在Startup.cs中做到的:

using Microsoft.Extensions.Configuration;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<MyContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("MyContext")));

        [ ... ]
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在控制器中做到这一点.我找到了本教程,配置一个ASP.NET核心应用程序,但它使用一个类来访问配置的选项,public class MyOptions

我试图做到这一点喜欢Startup.cs,Configuration.GetConnectionString("MyContext")但它不承认Configuration阶级.

我的问题是:如何在控制器中获取连接字符串?

Set*_*Set 10

您可以直接注入IConfiguration configuration控制器(默认情况下,它在DI容器中注册):

// using Microsoft.Extensions.Configuration;

public class YourController : Controller
{
      public YourController (IConfiguration configuration)
      {
           var connString = Configuration.GetConnectionString("MyContext");
      }

}
Run Code Online (Sandbox Code Playgroud)

但无论如何,请考虑使用IOptions模式,因为它会更灵活.

public class MyOptions
{
    public string ConnString { get; set; }
}

public void ConfigureServices(IServiceCollection services)
{ 
    // Adds services required for using options.
    services.AddOptions();

    services.Configure<MyOptions>(myOptions =>
    {
        myOptions.ConnString = Configuration.GetConnectionString("MyContext");
    });

    ...
}
Run Code Online (Sandbox Code Playgroud)

然后

  public YourController ((IOptions<MyOptions> optionsAccessor)
  {
      var connString = optionsAccessor.Value.ConnString;
  }
Run Code Online (Sandbox Code Playgroud)