在ASP.NETCore控制器中访问连接字符串我正在使用C#和.NETFramework4.7WebAPIs开发ASP.NETCore2.0.2。我想从方法的控制器中获取appsettings.json的连接字符串。我在Startup.cs中做到了:使用Microsoft.Extensions.Configuration;publicclassStartup{publicStartup(IConfigurationconfiguration){Configuration=configuration;}公共IConfiguration配置{得到;}//这个方法被运行时调用。使用此方法向容器添加服务。publicvoidConfigureServices(IServiceCollectionservices){services.AddMvc();services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString("MyContext")));[...]}但我不知道如何在控制器中执行此操作。我找到了本教程,ConfiguringASP.NETCoreApplication,但它使用一个类来访问配置选项,公共类MyOptions我在Startup.cs中尝试过,Configuration.GetConnectionString("MyContext"),但它不识别配置类.我的问题是:如何在控制器中获取连接字符串?您可以直接将IConfiguration配置注入到控制器中(默认情况下,它已注册到DI容器)://usingMicrosoft.Extensions.Configuration;publicclassYourController:Controller{publicYourController(IConfiguration配置){varconnString=Configuration.GetConnectionString("MyContext");但无论如何,请考虑使用IOptions模式,因为它会更灵活。公共类MyOptions{公共字符串ConnString{得到;放;}}publicvoidConfigureServices(IServiceCollectionservices){//添加使用选项所需的服务。服务。添加选项();服务。Configure(myOptions=>{myOptions.ConnString=Configuration.GetConnectionString("MyContext");});...}然后publicYourController((IOptionsoptionsAccessor){varconnString=optionsAccessor.Value.ConnString;}您可以将IConfiguration本身注入控制器并获取连接字符串:publicclassHomeController:Controller{privatereadonlystring_connectionString;publicHomeController(IConfigurationconfig){_connectionString=config.GetConnectionString("MyContext");}}你不需要你的连接字符串,你已经准备好注入你的dbcontext。所以你基本上可以注入你的dbcontext。(不要做这在你的控制器中,将它分开并创建一个存储库或其他东西并注入它)。您需要在启动时添加1个额外的注入:services.AddScoped();您的上下文应如下所示:publicclassDataContext:DbContext,IDataContext{publicDbSetUsers{get;放;}publicDataContext(DbContextOptionsoptions):base(options){}}然后你可以在任何地方注入你的背景。也许这不是您正在寻找的答案。在这种情况下,您可以添加模型并将其绑定到配置中并注入模型,例如:services.Configure(Configuration.GetSection("AssetProviderServiceClient"));然后你可以注入你的选项privatereadonlySchedulerConfig_config;publicYourController(IOptionsconfig){_config=config.Value;干杯!编辑:执行SP;如果你的上下文被注入,你可以这样做:varcommand=databaseContext.database.GetDbConnection().CreateCommand();cmd.CommandText="你的SP";cmd.CommandType=CommandType.StoredProcedure;使用(varreader=cmd.ExecuteReader()){varentitites=reader.MapToList();}也许有一些不正确的行...内存不足:)您可以使用DbContextDatabase.GetDbConnection()。ConnectionString像这样获取指定的上下文连接字符串publicHomeController(DbContextcontext){varconnectionString=context.Database.GetDbConnection().ConnectionString;更新:或者您可以创建一个委托publicdelegatestringConnectionStringExporter();然后将其注册为services.AddSingleton(()=>Configuration.GetConnectionString("Default"));在控制器中,您可以将其注入publicHomeController(ConnectionStringExporterexporter)然后您可以使用varconnectionString=exporter();获取连接字符串varconnectionString=exporter();您还可以添加具有指定连接字符串名称的委托参数。像publicdelegatestringConnectionStringExporter(stringname);以上就是C#学习教程:访问ASP.NETCore控制器中连接字符串共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关照——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
