ASP.NET Core控制器内部的访问连接字符串 [英] Access Connection String inside an ASP.NET Core controller
问题描述
我正在使用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")));
[ ... ]
}
但是我不知道如何在控制器中做到这一点.我已经找到本教程,配置ASP.NET Core应用,但是它使用一个类来访问配置的选项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.cs
,Configuration.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 configuration
注入到控制器中(默认情况下它已在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屋!