【发布时间】:2020-08-01 11:09:17
【问题描述】:
我在基于 .NET Core 的 WebAPI 上使用实体框架,我需要从控制器获取 id 并将其传递给另一个控制器,我需要将其存储在数据库中。 首先,在 Controller1 中,我有一个 Create() 方法,我在其中返回一个用户,并且有分配 id 的时刻。
public User Create(User user, string password)
{
// validation
if (string.IsNullOrWhiteSpace(password))
throw new AppException("Password is required");
if (_context.Users.Any(x => x.Username == user.Username))
throw new AppException("Username \"" + user.Username + "\" is already taken");
byte[] passwordHash, passwordSalt;
CreatePasswordHash(password, out passwordHash, out passwordSalt);
user.PasswordHash = passwordHash;
user.PasswordSalt = passwordSalt;
_context.Users.Add(user);
_context.SaveChanges();
return user;
}
在最后一步中,返回的“用户”已经设置了属性 ID。 之后,我需要获取 user.Id 并将其传递给 Controller2,如下所示:
[HttpPost]
public async Task<ActionResult<PaymentDetail>> PostPaymentDetail(PaymentDetail paymentDetail)
{
_context.PaymentDetails.Add(paymentDetail);
await _context.SaveChangesAsync();
return CreatedAtAction("GetPaymentDetail", new { id = paymentDetail.PMId}, paymentDetail);
}
我想我需要像 user.Id = paymentDetail.userId 这样的东西。
这是我调用 Create() 方法的 Controller1:
[HttpPost("register")]
public IActionResult Register([FromBody]RegisterModel model)
{
// map model to entity
var user = _mapper.Map<User>(model);
try
{
// create user
_userService.Create(user, model.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
【问题讨论】:
-
两个控制器都在项目中吗?您可以创建第二个控制器的本地实例并直接调用该方法吗?
-
两个控制器都在项目中。调用是从客户端(角度应用程序)进行的。这个想法是,当我在客户端注册一个新用户时,第一个 http 帖子转到创建用户登录详细信息的第一个控制器,然后第二个帖子转到我只想添加用户的第二个控制器id 作为不同表中的参考(在数据库中)。
-
你想在一两个Http请求中完成吗?
-
实际上我有两个来自客户端的两个控制器的发布请求。我需要将在第一个控制器中分配的 usedId 传递给第二个控制器
标签: c# .net-core entity-framework-core