访问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(options => options.UseSqlServer(Configuration.GetConnectionString("MyContext"))); [ ... ] }
但我不知道如何在控制器中做到这一点。 我找到了本教程, 配置ASP.NET核心应用程序 ,但它使用一个类来访问配置的选项, public class MyOptions
我试过像在Startup.cs
, Configuration.GetConnectionString("MyContext")
,但是它不识别Configuration
类。
我的问题是:如何在控制器中获取连接字符串?
您可以直接将IConfiguration configuration
注入控制器(默认情况下,它在DI容器中注册):
// using Microsoft.Extensions.Configuration; public class YourController : Controller { public YourController (IConfiguration configuration) { var connString = Configuration.GetConnectionString("MyContext"); } }
但无论如何,请考虑使用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.ConnString = Configuration.GetConnectionString("MyContext"); }); ... }
然后
public YourController ((IOptions optionsAccessor) { var connString = optionsAccessor.Value.ConnString; }
您可以将IConfiguration
本身注入控制器并获取连接字符串:
public class HomeController : Controller { private readonly string _connectionString; public HomeController(IConfiguration config) { _connectionString = config.GetConnectionString("MyContext"); } }
你不需要你的连接字符串,你已经准备好注入你的dbcontext。 所以你可以基本上只注入你的dbcontext。 (不要在您的控制器中执行此操作,并将其分开,并创建存储库或其他内容并注入此内容)。
您需要在启动时添加1个额外的注入:
services.AddScoped();
你的上下文应该是这样的:
public class DataContext : DbContext, IDataContext { public DbSet Users { get; set; } public DataContext(DbContextOptions options) : base(options) { } }
那么你可以随处注入你的背景。
也许这不是你要找的答案。 在这种情况下,您可以添加模型并在配置中绑定它并注入模型
就像是:
services.Configure( Configuration.GetSection("AssetProviderServiceClient"));
那么你可以注入你的选择
private readonly SchedulerConfig _config; public YourController(IOptions config) { _config = config.Value; }
干杯!
编辑:执行SP;
如果您的上下文被注入,您可以执行以下操作:
var command = databaseContext.database.GetDbConnection().CreateCommand(); cmd.CommandText = "your SP"; cmd.CommandType = CommandType.StoredProcedure; using (var reader = cmd.ExecuteReader()) { var entitites = reader.MapToList(); }
也许有一些不正确的行…内存不足:)
你可以使用DbContextDatabase.GetDbConnection()。ConnectionString获取指定的上下文连接字符串,就像这样
public HomeController(DbContext context) { var connectionString = context.Database.GetDbConnection().ConnectionString; }
更新:或者您可以创建委托
public delegate string ConnectionStringExporter();
然后将其注册为
services.AddSingleton(() => Configuration.GetConnectionString("Default"));
在控制器中你可以注入它
public HomeController( ConnectionStringExporter exporter)
那么你可以使用var connectionString = exporter();
获得connectionstring var connectionString = exporter();
您还可以使用指定的连接字符串名称添加委托参数。 像public delegate string ConnectionStringExporter(string name);
上述就是C#学习教程:访问ASP.NET Core控制器内的连接字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1043998.html