访问 ASP.NET Core 控制器内的连接字符串 [英] Access Connection String inside an ASP.NET Core controller

查看:19
本文介绍了访问 ASP.NET Core 控制器内的连接字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm developing an ASP.NET Core 2.0.2 Web API with C# and .NET Framework 4.7.

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

I want to get the connection string from appsettings.json in a method's controller.

我在 Startup.cs 中做到了:

I did it in 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")));

        [ ... ]
}

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

But I don't know how to do it in a controller. I have found this tutorial, Configure an ASP.NET Core App, but it uses a class to access configuration's options, public class MyOptions

我尝试像在 Startup.csConfiguration.GetConnectionString("MyContext") 中那样做,但它无法识别 Configuration代码>类.

I have tried to do it like in Startup.cs, Configuration.GetConnectionString("MyContext"), but it doesn't recognize Configuration class.

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

My question is: How can I get the connection string in a controller?

推荐答案

你可以直接将IConfiguration配置注入你的控制器中(默认在DI容器中注册):

You may directly inject IConfiguration configuration into your controller (it is registered in DI container by default) :

// using Microsoft.Extensions.Configuration;

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

}

<小时>

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


But anyway consider using the IOptions pattern as it will be more flexible.

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");
    });

    ...
}

然后

  public YourController ((IOptions<MyOptions> optionsAccessor)
  {
      var connString = optionsAccessor.Value.ConnString;
  }

这篇关于访问 ASP.NET Core 控制器内的连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆