【发布时间】: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