public async Task <ResponseMessage <GiftInfo> > ConsumableScore(Models.UserInfo user, [FromBody] ConsumableScoreRequest request) { Logger.Trace($"用户{user?.UserName ?? ""}({user?.Id ?? ""})抽奖,请求参数为:\r\n" + JsonHelper.ToJson(request)); var response = new ResponseMessage <GiftInfo>(); if (!ModelState.IsValid) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "模型验证失败" + ModelState.GetAllErrors(); Logger.Warn("抽奖模型验证失败:\r\n{0}", response.Message ?? ""); return(response); } var prefixs = new string[] { "ConsumableScore" }; var key = "ConsumableScore"; try { // 防止同时中奖,兑奖,数量不够。所以这里是一个一个来 await _cache.LockSubmit(prefixs, key, "ConsumableScore", HttpContext.RequestAborted); response = await _giftManager.ConsumableScoreAsync(user, request, HttpContext.RequestAborted); } catch (Exception e) { response.Code = ResponseCodeDefines.ServiceError; response.Message = e.Message; Logger.Error($"用户{user?.UserName ?? ""}({user?.Id ?? ""})抽奖,报错:{e.Message}\r\n{e.StackTrace}"); } finally { // 成功失败都要移除 await _cache.UnlockSubmit(prefixs, key); } return(response); }