值不能为空。参数名称:connectionString appsettings.json in starter

Value cannot be null. Parameter name: connectionString appsettings.json in starter

我试图在我的 appsettings.json 文件中写入我的连接字符串并将其放入我的启动文件中,但我总是得到一个值不能为空。 参数名称:连接字符串。我一直在使用各种示例,但似乎无法通过 ASP.NET 1.0 核心启动 class 看到这个新设置。

Appsetting.json 文件:

{
"Data": {
"DefaultConnection": {
  "ConnectionString": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"

},
"Logging": {
  "IncludeScopes": false,
  "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
  }
}
}
}

方法尝试中 Startup.cs

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

 public void ConfigureServices(IServiceCollection services)
    {
        var connStr = Configuration.GetConnectionString("DefaultConnection");
        System.Console.WriteLine(connStr);
        services.AddDbContext<DbContext>(options => options.UseSqlServer(connStr)); //error right here -- Null value
}

您需要将 appsetting.json 更改为:

    {
  "Data": {
    "ConnectionStrings": {
      "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"

    },
    "Logging": {
      "IncludeScopes": false,
      "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information"
      }
    }
  }
}

现在开始工作:

  var connStr = Configuration.GetConnectionString("DefaultConnection");

DefaultConnection 是 json 结构中的内部对象,它是 Data 对象的子对象。

因此,如果您想准确使用您的配置文件,您可以使用

var connStr = Configuration.GetSection("Data")
                           .GetSection("DefaultConnection")["ConnectionString"];

首先,

 "Data": {
"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
}

与在 Visual Studio 中添加 "Asp.NET Configuration File" 时得到的结构略有不同。当你这样做时,你会得到

"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},

没有 "Data" JavaScript 对象。所以这就是扩展方法不起作用的原因。它需要这种结构。无论如何,您都可以使用此结构(带有 "Data" 的结构)并像这样获取连接字符串:

var connectionString = Configuration["Data:ConnectionStrings:DefaultConnection"];

请注意,您正在使用 : 而不是 . 浏览 JavaScript 对象树。这是由于使用 . 时出现的一些跨平台问题。

如果您编辑掉 "Data":{},您可以这样做:

var connectionString = Configuration["ConnectionStrings:DefaultConnection"];

现在扩展方法可以工作了。在 Microsoft 扩展下面,它与上面的代码相同。

var config2 = Configuration.GetConnectionString("DefaultConnection");

这是我看到的消息

值不能为空。 参数名称:connectionString

我在启动时修改了这些行

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration["Data:BookStoreContext:ConnectionString"]));

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("BookStoreContext")));

我得到了类似的 error.My "appsettings.json" 文件未加载,因为文件的属性是复制到输出目录 -> 不复制。我将其设置为复制始终保存并且 rebuild.It 有效。

使用 Configuration.GetConnectionString("name")

时,appsettings.json 中的 ConnectionString 属性 名称后缺少字母 's'

如果要复制

"ConnectionStrings ": {
  "SpyStore": "Server=(localdb)\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}

方法措辞 GetConnectionString 让我感到困惑,我将鼠标悬停在它上面,哦,它正在寻找 ConnectionStrings 属性 名称而不是 ConnectionString

我与空连接字符串问题斗争了太久,才发现我是这样做的:

builder.Services.AddDbContext<MlDataContext>(provider => new MlDataContext(config.GetConnectionString("ConnectionStrings:SqlConnectionString")));

我同时使用了 ConnectionStrings: 前缀和 GetConnectionString。当我删除它工作的前缀时:

builder.Services.AddDbContext<MlDataContext>(options => options.UseSqlServer(config.GetConnectionString("SqlConnectionString")));

我在使用 asp.net 核心 3.0 时遇到了这个问题。 我的解决方法是:

而不是:

var connectionString = Configuration["ConnectionStrings:DefaultConnection"];

使用这个:

var connectionString = Configuration["ConnectionStrings::DefaultConnection"];

这里强调的是连接配置中的双冒号。

我得到这个是因为我有一个带有 \ 的连接字符串,它需要转义为 \。所以我的 localdb 连接字符串导致了这样的加载错误:

"DefaultConnection": "Server=(localdb)\myinstance;Integrated Security=true;Initial Catlog=my-localdb;"

并通过以下方式修复:

"DefaultConnection": "Server=(localdb)\myinstance;Integrated Security=true;Initial Catlog=my-localdb;"

在 asp.net 核心中,您必须将 IConfiguration 添加到启动承包商方法并将此参数分配给从 class

中的 IConfiguration 继承的 属性
 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        this.Configuration = configuration;
    }
    public IConfiguration Configuration { get; }

我的另一个错误是我使用的是 ConnectionString,而不是 ConnectionString(注意最后 's')

也许你可以试试这个:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer("DefaultConnection")
);

然后设置你的appsettings.json做这样的事情:

"ConnectionStrings:": {
    "DefaultConnection": "Server=(localdb)\MSSQLLocalDB;Database=HOME1_DATABASE;Trusted_Connection=True;MultipleActiveResultSets=true"
},

之后,当我通过控制台添加迁移时,它成功了。

使用 Postgres SQL 时 appsettings.Development.json 必须包含

"ConnectionStrings": {  
      "DefaultConnection": "User ID=user;Password=xxxx;Host=127.0.0.1;Port=5432;Database=abc;Pooling=true"
    }  

Startup.cs 文件中的内容类似于

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>
        (p => p.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));            
    }

对于 Postgre Db,下面对我有用

    private readonly IConfiguration _config;

    string connectionString;
    public DataBaseContext(IConfiguration config)
    {
        _config = config;
        connectionString= _config.GetValue<string>("ConnectionStrings:sampleConnection");
    }

配置文件:

“连接字符串”:{ “示例连接”:“..” }

启动文件: services.AddScoped();

我的问题已通过更正拼写错误得到解决

就我而言,我的 Startup class 中有两个 IConfiguration 定义。没有帮助:)

我在使用 Asp.Net Core 5 的那天遇到了这个错误。我尝试了以上所有解决方案,但都不满意。然后我删除了 appsettings.json 文件的“ConnectionStrings”部分并启动了迁移。错误发生后,我重写了该部分并再次启动了迁移。一切正常。

请确保您在 app.json 中定义了所有连接字符串。 我的问题是我有两个不同的项目在他们的服务配置中添加了一个 dbContext

  1. 引用了 identityDb 的身份项目
  2. 我所有数据访问逻辑的持久化项目

我通过在 app.json

中定义两个连接字符串解决了这个问题

将连接字符串添加到 appsetting.json 文件的正确方法如下:

"ConnectionStrings":{
   "DefaultConnection":"Server=localdb)\MSSQLLocalDB;Datbase=MyShop;Trusted_Connection=true"
}
  • 我明白了,这是因为应用程序设置中的连接字符串名称与启动时配置中的连接字符串名称不同!!!

  • 启动时连接字符串配置正确代码

// replace NAMEHERE with the name of the class that inherits from DbContext
services.AddDbContextPool <NAMEHERE> (opts => opts.UseSqlServer(Configuration.GetConnectionString("here put the same Connection string name that in appsettings")));

尝试一下,它会在 3.0.0 版本上为您工作。

public class 启动 { 私有只读 IConfiguration 配置; public Startup(IConfiguration配置) { this.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.AddControllersWithViews();
        services.AddDbContext<DataContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("MyPortfolio"));
        });
    }

appsettings.json

{

“记录”:{ “日志级别”:{ “默认”:“信息”, “微软”:“警告”, "Microsoft.Hosting.Lifetime": "信息" } }, "允许的主机": "*", “连接字符串”:{ "MyPortfolio": "Data Source=(localdbd)\MSSQLLocalDB; initail catalog=MyPortfolioDB; Integrated Security=true" } }

我遇到了同样的问题,这解决了我的问题:

connStr = Configuration.GetConnectionString("DefaultConnection");

更改为:

connStr = Configuration["DefaultConnection:ConnectionString"]