【问题标题】:ASP.NET Core 2.2 error when setting up DBContext (works in Kestrel, not in IIS Express)设置 DBContext 时出现 ASP.NET Core 2.2 错误(在 Kestrel 中有效,在 IIS Express 中无效)
【发布时间】:2019-06-17 14:21:53
【问题描述】:

我有一个 .Net Core 2.2 Web 项目,我在 Startup.cs 文件中设置了 dbcontext 连接:

services.AddDbContext<FirmDirectoryContext>(options =>  
              options.UseSqlServer(Configuration.GetConnectionString("DefaultDatabase")));

当我运行这是 Kestrel 时,它可以工作,但如果我尝试使用 IIS Express 运行它,我会得到以下信息:

{System.ArgumentNullException:值不能为空。参数名称:connectionString

连接字符串显然是在 appsettings.json 文件中设置的,否则 Kestrel 也会失败?

【问题讨论】:

  • 您遇到此异常的实际行是什么?
  • “services.AddDbContext”行
  • 您能否分享一下您的 appsettings.json 文件与一些模拟值的样子?
  • 能否分享startup.cs和program.cs代码进行跟踪。

标签: c# iis asp.net-core kestrel


【解决方案1】:

我不确定您的 appsettings.json 是什么样子,但您的 json 文件中应该有这样的部分:

"ConnectionStrings": {
    "DefaultDatabase": "<Your connection string>"
}

【讨论】:

    【解决方案2】:

    如果您的环境设置为开发环境,dotnet 从 appsettings.development.json 获取连接字符串。

    确保你也在那里设置了连接字符串。

    【讨论】:

      【解决方案3】:

      看起来问题出在我的 Program.cs 文件中。我从 .NET Core 2.1 项目中复制了一些我使用的代码

      WebHost.CreateDefaultBuilder(args)
           .UseContentRoot(Directory.GetCurrentDirectory())
           .UseWebRoot(Directory.GetCurrentDirectory() + "\\wwwroot") // THIS LINE FIXES STATIC FILES ON PROD
           .UseIISIntegration()
           .UseStartup<Startup>();
      

      一旦我编辑它以删除 Directory.GetCurrentDirectory() 代码,它就可以工作了。

      WebHost.CreateDefaultBuilder(args)
           .UseIISIntegration()
           .UseStartup<Startup>();
      

      现在我必须在服务器上进行测试,看看它是否仍然有效。感谢您的回复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2017-08-04
        相关资源
        最近更新 更多