c# - 如何使用 ASP 更新用户详细信息。NET 核心 MVC?并发失败
问题描述
我正在尝试使用 ASP.NET Core MVC 和 Angular 从 SQL 数据库更新用户详细信息。我想在不将UserID发送到 API 的情况下更新用户,因此我必须在 PUT 方法中获取 UserId。我使用实体和身份来创建数据库。
使用以下代码,我收到此错误:
Code: "ConcurrencyFailure"
Description: "Optimistic concurrency failure, object has been modified."
我怎样才能使它起作用?
放置方法
[HttpPut]
[Route("Update")]
//api/ApplicationUser/Update
public async Task<Object> PutApplicationUser(UserAccountModel model)
{
var user = _userManager.GetUserId(HttpContext.User);
var applicationUser = new UserAccount()
{
UserName = model.UserName,
FirstName = model.FirstName,
LastName = model.LastName,
Email = model.Email,
PhoneNumber = model.PhoneNumber,
VerificationCode = "",
ExpCode = new DateTime(2020, 8, 18),
SecurityStamp = Guid.NewGuid().ToString()
};
try
{
var result = await _userManager.UpdateAsync(applicationUser);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
用户帐户模型
public class UserAccount : IdentityUser
{
[Column(TypeName = "nvarchar(30)")]
public string FirstName { get; set; }
[Column(TypeName = "nvarchar(30)")]
public string LastName { get; set; }
[Column(TypeName = "nvarchar(30)")]
public string VerificationCode { get; set; }
[Column(TypeName = "smalldatetime")]
public DateTime ExpCode { get; set; }
public virtual ICollection<File> File { get; set; }
public virtual ICollection<Folder> Folder { get; set; }
}
解决方案
尝试获取ConcurrencyStamp
此用户并将其设置为您的更新模型:
var user = _userManager.GetUserId(HttpContext.User);
var currStamp = ... // somehow get current stamp
var applicationUser = new UserAccount()
{
...
ConcurrencyStamp = currStamp
};
或者只是使用UserManager<TUser>.GetUserAsync
和更新返回用户的字段:
var user = await _userManager.GetUserAsync(HttpContext.User);
user.UserName = model.UserName;
.....
var result = await _userManager.UpdateAsync(user);
推荐阅读
- reactjs - 添加取消图标以关闭 Material-UI Drawer
- bash - 如何在 shell for 循环中延迟评估命令
- selenium - 量角器 browser.manage().logs().get('performance') 未检索服务器响应正文
- java - UriComponentsBuilder - 如何替换一些查询参数并删除未使用的?
- java - Apollo GraphQL Android 无法解决“无法解析 http 响应”错误
- html - z-index 会影响线性背景吗?
- unix - 计算文件中存在的日期与今天日期之间的天差
- php - 通过PHP和curl发送短信(无效号码状态400)
- typescript - TypeScript:在泛型中使用命名空间类型参数
- javascript - 快照测试失败
在反应原生和开玩笑