.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()); });
浙公网安备 33010602011771号