证书链由不受信任的颁发机构颁发



我研究了升级到aspnetcore 2.1.0的帮助

我的数据库是 SQLExpress 2016SP1

我可以添加迁移,但是当我发出时

update-database

在程序包管理器控制台中,我收到错误

已成功与服务器建立连接,但在登录过程中发生错误。
(提供程序:SSL 提供程序,错误:0 - 证书链由不受信任的颁发机构颁发。

连接字符串的格式为

Server="Server=myserver;Initial Catalog=mydatabase;Trusted_Connection=True;MultipleActiveResultSets=true

DbContext

public class ApiDbContext : IdentityDbContext<ApplicationUser>
{
public ApiDbContext(DbContextOptions<ApiDbContext> options)
: base(options)
{
}
}

上下文工厂是

public class MyContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
public ApiDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApiDbContext>();
var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");
var config = builder.Build();
var connectionString = config.GetConnectionString("MyDatabase");
optionsBuilder.UseSqlServer(connectionString);
return new ApiDbContext(optionsBuilder.Options);
}
}

[更新]

如果我在 IDesignTimeDbContextFactory 的实现中对连接字符串进行硬编码,那么我可以运行迁移

public class MyContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
public ApiDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApiDbContext>();
var connectionString =    "Server=myserver;Initial Catalog=mydatabase;Trusted_Connection=True;MultipleActiveResultSets=true";
optionsBuilder.UseSqlServer(connectionString);
return new ApiDbContext(optionsBuilder.Options);
}
}

硬编码连接字符串是不可取的,所以我想要一个更好的答案。

我不清楚为什么需要实现IDesignTimeDbContextFactory。 (没有它,我的迁移确实会失败(

我已经更新了我的 Startup.cs 和 Progam.cs以匹配不需要实现的新生成的程序。

public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
public class Startup
{
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.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApiDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MyDatabase")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApiDbContext>();

服务业。AddMvc((.设置兼容性版本(CompatibilityVersion.Version_2_1(; }

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc();
}
}

[更新]

我更新到VS2017版本15.7.3。 当我重复问题并创建第一个迁移时,PM 显示消息

The configuration file 'appsettings.json' was not found and is not optional

当我始终标记此文件副本时,添加迁移和更新数据库都起作用了。

尝试将TrustServerCertificate=True添加到连接字符串中,根据此 堆栈溢出帖子

2022 年更新:

链接的帖子已更新,增加了更多最新的建议。此处发布的答案是权宜之计,不建议用于生产工作负载

设置"TrustServerCertificate=True"并使用Windows身份验证为我解决了这个问题。

"Server=.\SQLEXPRESS;Database=Bulky;TrustServerCertificate=True;User ID=sa; Password=123;Trusted_Connection=True"

将密码替换为您选择的密码和用户

本地安装的快速 SQL

更改加密=假; 在连接字符串中对我有用;

相关内容

  • 没有找到相关文章

最新更新