添加更新模型后验证模型

Validate model after adding updating model

我正在 .net 核心上开发 Web api。我正在尝试 validate/revalidate 一个模型 添加额外的数据到模型之后(即在添加当前登录用户的用户名之后)。

假设这是我的控制器的操作

[Authorize]
[HttpPost]
public void Update([FromBody]UpdateUser User)

这是我用于身份验证方案的代码:

string token = Context.Request.Query["token"];
if (token == null) return AuthenticateResult.Fail("No JWT token provided");
try
{
    var principal = LoginControl.Validate(token);
    return AuthenticateResult.Success(new AuthenticationTicket(principal, SchemeName));
}
catch (Exception)
{
    return AuthenticateResult.Fail("Failed to validate token");
}

基本上我正在尝试实现这个流程: Post 请求 -> 授权 -> 将用户 ID 添加到模型中 -> 验证模型。

所以授权后,我需要先添加User.UserName = CurrentUserName,只需要验证模型,然后我就可以在新更新的模型上使用ModelState对象。 截至目前,我正在尝试以下操作:

[HttpPost]
public async Task Update([FromBody]UpdateUser User)
{
    User.UserName = "hello";
    bool valid = await TryUpdateModelAsync(User);
    valid = TryValidateModel(User);
}

现在在这两个实例中 valid 都是错误的,ModelState 表明 UserName 是必需的。我在 UpdateUser 中添加的唯一验证是在模型中添加 [Required]

我通过在调用 TryValidateModel 之前清除模型来让它工作。

[HttpPost]
public async Task Update(UpdateUser User)
{
    User.UserName = "hello";
    ModelState.Clear();
    TryValidateModel(User);
    // ModelState is now reset
}