我创建了一个模型绑定器,将其放置在模型绑定器本身中可以使“映射”变得“干净”,但是现在我想用另一种动作方法再次进行映射,我只是想知道是否有更好的方法可以这样做,因为我不确定这样做是正确的地方。
我的操作方法如下:
[HttpPost("Register")]
public async Task<IActionResult> Register(
[FromQuery] UserToRegister userToRegister,
User user /*This property is never used from the body request, since I set it in my custom Model Binder*/)
{
var response = await _userService.RegisterAsync(user);
return Ok(response);
}
我创建了一个自定义Model Binder,在其中将属性从userToRegister
映射到user
参数中。所以这个自定义资料夹看起来像这样:
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var values = bindingContext.ValueProvider;
User user = new User()
{
Id = Guid.NewGuid(),
Name = values.GetValue("Name").FirstValue,
Password = /*password encrypted*/,
...
};
bindingContext.Result = ModelBindingResult.Success(user);
return Task.CompletedTask;
}
那么您觉得这是一个很好的解决方案吗?在请求中获取User
对象会更好,以便以后修改它吗?我应该在ModelBinder
中进行此修改(散列密码,创建新ID等)吗?