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

epv*_*epv 16 json appsettings asp.net-core asp.net-core-1.0

我试图在我的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"
  }
}
}
}
Run Code Online (Sandbox Code Playgroud)

尝试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
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*nJM 34

使用时,我ConnectionString在 appsettings.json 中的属性名称后遗漏了字母“s”Configuration.GetConnectionString("name")

在此处输入图片说明

如果你想复制

"ConnectionStrings ": {
  "SpyStore": "Server=(localdb)\\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}
Run Code Online (Sandbox Code Playgroud)

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


Gle*_*lls 27

首先,

 "Data": {
"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
}
Run Code Online (Sandbox Code Playgroud)

与在Visual Studio中添加"Asp.NET配置文件"时获得的结构略有不同.当你这样做,你得到

"ConnectionStrings": {
  "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
Run Code Online (Sandbox Code Playgroud)

没有"App"JavaScript对象.这就是扩展方法不起作用的原因.它期待这种结构.无论如何你可以使用这个结构(带有"App"的结构)并获得连接字符串,如下所示:

var connectionString = Configuration["Data:ConnectionStrings:DefaultConnection"];
Run Code Online (Sandbox Code Playgroud)

请注意,您使用":"而不是"."来浏览JavaScript对象树.这与使用'.'的一些跨平台问题有关.

如果你编辑出"App":{}你可以这样做:

var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
Run Code Online (Sandbox Code Playgroud)

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

var config2 = Configuration.GetConnectionString("DefaultConnection");
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了类似的错误。我的“appsettings.json”文件未加载,因为该文件的属性是“复制到输出目录”->“不复制”。我将其设置为“复制总是保存并重建”。它有效。