ASP.NET 核心 MVC。 IDataProtectionKeyContext 接口的实现
ASP.NET Core MVC. Implementation of the IDataProtectionKeyContext interface
有一个数据上下文:
public class OurDbContext : DbContext, IOurDbContext, IDataProtectionKeyContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
}
有一个实现向数据库发送数据的方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateNewClient(Employee client, string TypeOfClient)
{
var secstring = _protector.Protect(client.Password);
Employee temp = new Employee
{
Name = client.Name,
Password = secstring,
RoleId = 1
};
await _mediatr.Send(new NewEmployee.NewEmployeeCommand(temp));
return Redirect("~/");
}
没有任何内容进入数据库。
如果从上下文中删除实现 class IDataProtectionKeyContext
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
并用
缩短行
builder.Services.AddDataProtection().PersistKeysToDbContext<OurDbContext>();
之前
builder.Services.AddDataProtection();
然后数据以加密密码进入数据库。但在这种情况下,5 分钟后,尝试读取此密码将由于过时的密钥而导致异常。
Microsoft 帮助对此没有任何说明:
简而言之,我尝试将上下文从 PostgresSQL 更改为 MS SQL 和 Sqlite,并且在 Microsoft 在其帮助中推荐的配置下一切都运行良好。
有一个数据上下文:
public class OurDbContext : DbContext, IOurDbContext, IDataProtectionKeyContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
}
有一个实现向数据库发送数据的方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateNewClient(Employee client, string TypeOfClient)
{
var secstring = _protector.Protect(client.Password);
Employee temp = new Employee
{
Name = client.Name,
Password = secstring,
RoleId = 1
};
await _mediatr.Send(new NewEmployee.NewEmployeeCommand(temp));
return Redirect("~/");
}
没有任何内容进入数据库。
如果从上下文中删除实现 class IDataProtectionKeyContext
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
并用
缩短行builder.Services.AddDataProtection().PersistKeysToDbContext<OurDbContext>();
之前
builder.Services.AddDataProtection();
然后数据以加密密码进入数据库。但在这种情况下,5 分钟后,尝试读取此密码将由于过时的密钥而导致异常。
Microsoft 帮助对此没有任何说明:
简而言之,我尝试将上下文从 PostgresSQL 更改为 MS SQL 和 Sqlite,并且在 Microsoft 在其帮助中推荐的配置下一切都运行良好。