首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AutoMapper 6中加密密码?

如何在AutoMapper 6中加密密码?
EN

Stack Overflow用户
提问于 2017-09-01 01:39:58
回答 1查看 1.1K关注 0票数 0

型号名称: UserModelInsert 实体名称:用户

代码语言:javascript
复制
CreateMap<UserModelInsert, User>()
.ForMember(
dest => dest.Password, 
src => src.MapFrom(?????????????????))

为了得到正确的结果,我已经尝试了各种方法。我已经创建了继承接口IValueResolver、IMemberValueResolver和您所能想象的所有接口的类,但不幸的是,我无法解决这个问题。

我只需要这样的东西:CreateMap<UserModelInsert, User>().ForMember(dest => dest.Password, src => src.MapFrom(s => StringUtils.Encrypt(s.Password))),但它不起作用

EN

回答 1

Stack Overflow用户

发布于 2017-09-01 03:04:00

执行部分:

我只需要这样的东西:CreateMap<UserModelInsert, User>().ForMember(dest => dest.Password, src => src.MapFrom(s => StringUtils.Encrypt(s.Password))),但它不起作用

只需使用AutoMapper的自定义式转换器功能即可。

有时,您需要完全控制一种类型到另一种类型的转换。通常,当一种类型看起来与另一种类型不一样时,转换函数已经存在,您希望从“松散”类型转到更强的类型,例如字符串的源类型到目标类型的Int32。

例如礼节 of AutoMap

代码语言:javascript
复制
Mapper.Initialize(cfg => {
      cfg.CreateMap<string, int>().ConvertUsing(s => Convert.ToInt32(s));
      cfg.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());
      cfg.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>();
      cfg.CreateMap<Source, Destination>();
    });

public class DateTimeTypeConverter : ITypeConverter<string, DateTime>
{
    public DateTime Convert(string source, DateTime destination, ResolutionContext context)
    {
        return System.Convert.ToDateTime(source);
    }
}

没有什么能阻止您创建您自己的MyPasswordConverter,将string转换为SecureString

因此,以您的例子为例,您可以生成如下内容:

代码语言:javascript
复制
public class MyPasswordConverter: ITypeConverter<string, SecureString>
{
    public SecureString Convert(string source, SecureString destination, ResolutionContext context)
    {
        return StringUtils.Encrypt(source);
    }
}

当然,...assuming返回一个SecureString (它可能应该返回)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45992249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档