添加更新模型后验证模型

时间:2017-10-31 08:30:32

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

我正在使用.net核心上的web api。我试图验证/重新验证模型 在模型中添加其他数据后(即添加当前登录用户的用户名后)。

让我们说这是我的控制者的行动

public function delete_std($std_id)
{
$this->load->model('std_model');
$this->std_model->delete_std($std_id,$std_image);
redirect('std_main/view_std');
}

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

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

基本上我正在努力实现这个流程: 发布请求 - >批准─>将用户ID添加到模型中 - >验证模型。

因此,在获得授权后,我需要先添加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"); } 并且只需要验证模型,之后我可以在新更新的模型上使用User.UserName = CurrentUserName对象。 截至目前,我正在尝试以下方法:

ModelState

目前,两个实例[HttpPost] public async Task Update([FromBody]UpdateUser User) { User.UserName = "hello"; bool valid = await TryUpdateModelAsync(User); valid = TryValidateModel(User); } 均为false,valid表示需要ModelState。我在UpdateUser中添加的唯一验证是在模型中添加UserName

1 个答案:

答案 0 :(得分:0)

我通过在调用TryValidateModel之前清除模型来实现它。

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