例如,我有一个模型,
public class OccupationType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[JsonProperty("userId")]
[ForeignKey("ApplicationUser")]
public string UserId { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
这将设置与ApplicationUser
对象的多对 1 关系,这是我存储用户身份的地方。
我的控制器通常采用上述模型并保留传入的数据,例如:
public async Task<IHttpActionResult> Put(string id, OccupationType occupationtype)
{
// DO BUSINESS LOGIC
return StatusCode(HttpStatusCode.NoContent);
}
而来自客户端的典型有效负载更像这样:
{
UserId = "###-###-..."
Type = "..."
}
没有ApplicationUser
财产。但是,当此对象被初始化时,模型中将包含一个ApplicationUser
对象。用户首次使用控制器时,ApplicationUser
的标识是携带有权使用控制器操作的令牌的用户的身份。
这很好,直到我向其他用户发送另一个请求。然后,即使其他用户使用新令牌,ApplicationUser
仍与第一个用户相同。
我很困惑。如何选择用户来自动填充ApplicationUser
属性?为什么当使用新令牌发出请求时,它不知道新的主体?
MVC ModelBinder 可能会将发布的UserId
绑定到occupationType.UserId
。之后,根据该用户 ID 获取occupationType.ApplicationUser
。持有者令牌与此无关。
所以我的赌注是客户端在第二个请求中发送相同的 UserId。