添加更新模型后验证模型
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
}
我正在 .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
}