【问题标题】:IConfiguration returning null. Cannot Read from DatabaseIConfiguration 返回空值。无法从数据库中读取
【发布时间】:2021-02-08 18:59:11
【问题描述】:

我有一个 .Net Core 3.1 程序返回错误

System.ArgumentNullException: '值不能为空。 (参数'connectionString')'

当我尝试登录系统时。

我已经设置了断点

public IConfiguration Configuration { get; }

在构建时,可以看到连接字符串,但我立即登录它返回 null。

下面是我的代码。

Startup.cs

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.AddRazorPages();
    services.AddSession();
    services.AddMvc().AddRazorPagesOptions(options =>
    {
        options.Conventions.AddPageRoute("/Login/Login", "");
    });

    services.AddDbContext<CENTREContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DatabaseConnection")));
    //var connection = Configuration.GetConnectionString("ConnectionStrings");
    //services.Configure<ConnectionStrings>(Configuration.GetSection("DatabaseConnection"));

    //services.AddDbContext<CENTREContext>(options => options.UseSqlServer(connection));
}

上下文类

public CENTREContext(DbContextOptions<CENTREContext> options)
    : base(options)
{
}

public CENTREContext()
{ }

public IConfiguration Configuration { get; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {               
        optionsBuilder.UseSqlServer(Configuration.
        GetConnectionString("ConnectionStrings:DatabaseConnection"));
    }
}

appsettings.json

{
    "ConnectionStrings": {
        "DatabaseConnection": "Server=xx-xx;Database=CENTRE;UID=xx;Password=xxx;"
    },
    "AllowedHosts": "*"
}

我已经尝试过,但似乎没有任何效果。 我们将不胜感激。

【问题讨论】:

  • 您在一个地方使用Configuration.GetConnectionString("DatabaseConnection"),但在另一个地方使用Configuration.GetConnectionString("ConnectionStrings:DatabaseConnection") - 它们不可能都是正确的。
  • @MartinCostello 我以前试过这个,错误还是一样

标签: c# asp.net-core-3.1


【解决方案1】:

你混合了你的选择。

GetSection + 索引运算符

connectionStrings = configuration.GetSection("ConnectionStrings");
connectionString = connectionStrings["DatabaseConnection"];

GetSection + 路径

connectionString = configuration.GetSection("ConnectionStrings:DatabaseConnection").Value;

获取连接字符串

connectionString = configuration.GetConnectionString("DatabaseConnection");

【讨论】:

  • 最好的方法是什么
  • @Nickson 最后一个只是第一个周围的wrapper。在我看来,第三个是最简洁和方便的。
  • 不,我更改了所有连接字符串以匹配第三个选项,但错误仍然相同
  • @Nickson 你是说连接字符串检索逻辑吗?
  • 是的,似乎连接字符串没有被传递,因此返回为 null
猜你喜欢
  • 2020-01-13
  • 2018-10-12
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多