Вы используете пользователя, полученного с помощью POST, что является не только плохой практикой, но даже не работает здесь, потому что вы не публикуете полный объект User
.А именно, значение SecurityStamp
отсутствует, о чем говорит вам исключение.
Не публикуйте User
.Вместо этого используйте идентификатор пользователя для извлечения его из базы данных:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(string id, string[] roles)
{
var user = await _userManager.FindByIdAsync(id);
if (user == null)
{
return NotFound();
}
// the rest of your code
ОБНОВЛЕНИЕ (для одновременного изменения пользователя)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(string id, User model, string[] roles)
{
var user = await _userManager.FindByIdAsync(id);
if (user == null)
{
return NotFound();
}
// map over the values from `model` (i.e. the posted `User`)
user.FirstName = model.FirstName;
// etc.
// use `user` not `model` for role management functions