在ModelBinder中映射模型

时间:2020-05-28 16:24:17

标签: c# asp.net asp.net-core model-binding

我创建了一个模型绑定器,将其放置在模型绑定器本身中可以使“映射”变得“干净”,但是现在我想用另一种动作方法再次进行映射,我只是想知道是否有更好的方法可以这样做,因为我不确定这样做是正确的地方。

我的操作方法如下:

[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等)吗?

0 个答案:

没有答案
相关问题