【问题标题】:Validate model after adding updating model添加更新模型后验证模型
【发布时间】:2017-10-31 16:48:11
【问题描述】:

我正在开发 .net 核心上的 web api。我正在尝试验证/重新验证模型向模型中添加额外数据(即在添加当前登录用户的用户名之后)。

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

[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");
}

基本上我正在尝试实现这个流程: 发布请求 -> 授权 -> 将用户 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]

【问题讨论】:

  • 我找到了解决方案,但如果有人想将此功能变成过滤器,请告诉我

标签: authentication access-token asp.net-core-webapi model-validation


【解决方案1】:

我通过在调用 TryValidateModel 之前清除模型使其工作。

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

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2023-04-07
    • 2015-05-12
    • 2016-11-18
    • 2011-11-14
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多