.net core IModelBinderProvider

实现 方法参数 自动赋值

比如说 自动 为 sysUser赋值 方便开发

 

核心 代码 

 需要实现  IModelBinderProvider 接口

 需要实现  IModelBinder 接口

直接上代码

    public class SysUserModelBinderProvider : IModelBinderProvider
    {
        public IModelBinder GetBinder(ModelBinderProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException();
            }
            if (context.Metadata.BinderType == typeof(SysUser))
            {

                return new BinderTypeModelBinder(typeof(SysUserModelBinder));
            }
            return null;
        }
    }

 

  public class SysUserModelBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {          
            if (bindingContext == null)
            {
                throw new NotImplementedException();
            }
            else
            {

                if (bindingContext.ModelType ==typeof(SysUser))
                {
                    SysUser sysUser = new SysUser();

                    var userPrincipal = bindingContext.HttpContext.User;
                    var claims = userPrincipal.Claims;
                    foreach (var claim in claims)
                    {
                        // 1、获取用户Id
                        if (claim.Type.Equals("sub"))
                        {
                            sysUser.Id = Convert.ToInt32(claim.Value);
                        }

                        // 2、获取用户名
                        if (claim.Type.Equals("amr"))
                        {
                            sysUser.Name = claim.Value;
                        }
                    }
                    bindingContext.Result = ModelBindingResult.Success(sysUser);
                }
            }
            return Task.CompletedTask;
        }
    }

使用

  services.AddControllers(options => { options.ModelBinderProviders.Insert(0, new SysUserModelBinderProvider()); }); 

 

posted on 2023-06-06 15:38  是水饺不是水饺  阅读(142)  评论(0)    收藏  举报

导航