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

时间:2016-11-29 19:53:08

标签: json asp.net-core asp.net-core-1.0 appsettings

我正在尝试在我的appsettings.json文件中编写我的连接字符串并将其带入我的启动文件但是我不断得到一个值不能为空。 参数名称:connectionString。我一直在使用各种示例,但似乎无法看到ASP.NET 1.0 Core启动类的这个新设置。

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
}

19 个答案:

答案 0 :(得分:20)

首先,

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

与添加&#34; Asp.NET配置文件&#34;时的结构略有不同。在Visual Studio中。当你这样做时,你得到了

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

没有&#34; App&#34; JavaScript对象。这就是为什么扩展方法不起作用的原因。它期待这种结构。你可以使用这个结构(#34; App&#34;),并为你提供连接字符串:

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

请注意,您使用&#39;来导航JavaScript对象树:&#39;而不是&#39;。使用&#39;对于某些跨平台问题有所帮助。&#39;。

如果您编辑了&#34;应用&#34;:{},您可以执行此操作:

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

现在扩展方法将起作用。在封面下面,它与上面的代码相同。

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

答案 1 :(得分:1)

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

因此,如果您想要与配置文件完全匹配,可以使用

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

答案 2 :(得分:1)

在使用ConnectionString时,我在appsettings.json中Configuration.GetConnectionString("name")属性名后面缺少字母's'

enter image description here

如果要复制

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

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

答案 3 :(得分:1)

我的问题是通过修正一个错字来解决的 enter image description here

答案 4 :(得分:1)

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

答案 5 :(得分:1)

也许您可以尝试以下方法:

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

然后将您的appsettings.json设置为如下操作:

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

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

答案 6 :(得分:0)

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

"ConnectionStrings":{
   "DefaultConnection":"Server=localdb)\\MSSQLLocalDB;Datbase=MyShop;Trusted_Connection=true"
}

答案 7 :(得分:0)

您需要将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");

答案 8 :(得分:0)

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

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

我通过在 app.json 中定义了两个连接字符串解决了这个问题

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

对于Postgre Db,以下对我有用

    private readonly IConfiguration _config;

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

配置文件:

“ ConnectionStrings”:{ “ sampleConnection”:“ ..” }

启动文件: services.AddScoped();

答案 12 :(得分:0)

使用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")));            
    }

答案 13 :(得分:0)

在asp.net核心中,您必须将IConfiguration添加到startUptractor方法中,并将此参数分配给从类内部IConfiguration继承的属性中

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        this.Configuration = configuration;
    }
    public IConfiguration Configuration { get; }

答案 14 :(得分:0)

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

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

并通过以下方式修复:

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

答案 15 :(得分:0)

我使用asp.net core 3.0遇到了这个问题。 对我来说,解决方法是:

代替:

  

var connectionString =   Configuration [“ ConnectionStrings:DefaultConnection”];

使用此:

  

var connectionString =   Configuration [“ ConnectionStrings :: DefaultConnection”];

这里的重点是连接配置中的双冒号。

答案 16 :(得分:0)

我为空连接字符串问题奋斗了太久,才发现我正在这样做:

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

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

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

答案 17 :(得分:0)

我遇到了类似的错误。我的“ appsettings.json”文件未加载,因为文件的属性是“复制到输出目录->不复制”。我将其设置为“复制始终保存并重建。”可以正常工作。

答案 18 :(得分:0)

这是出现在我身上的消息

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

我修复了这些行在启动时更改的情况

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

收件人

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