如何在 Asp.Net 5 核心应用程序中配置 AutoMapper?
How to configure AutoMapper in Asp.Net 5 Core app?
我正在尝试在我的 Asp.NET 5 Core 项目中使用 AutoMapper。
在我项目的启动文件中,我添加了以下内容
Type[] types = all scannable types...
services.AddAutoMapper((serviceProvider, MapperExpression) =>
{
// Not sure if this is needed
MapperExpression.ConstructServicesUsing(t => serviceProvider);
// Manually add the mapping without using a profile for now..
MapperExpression.CreateMap(typeof(User), typeof(UserViewModel));
}, types);
综上所述,我希望能够将UserViewModel
映射到User
。但是,我收到以下错误
AutoMapper.AutoMapperMappingException: Missing type map
configuration or unsupported mapping.
Mapping types: Object -> User System.Object - User
这是我从控制器调用 AutoMapper 的方式
[ApiController]
public class UsersController : ControllerBase
{
private readonly IMapper _mapper;
public UsersController(IMapper mapper)
{
_mapper = mapper;
}
public async Task<ActionResult<DisplayUserViewModel>> Create([FromBody] UserViewModel viewModel)
{
User model = _mapper.Map<User>(viewModel);
//...
}
}
这是我的模型
public class UserViewModel
{
[Required]
public string Password { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string FirstName { get; set; }
public string MiddleName { get; set; }
[Required]
public string LastName { get; set; }
}
public class User : IdentityUser<int>
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
如何将 AutoMapper 服务正确添加到我的 .Net 5 核心项目?
需要 2 个东西:
在 Startup.cs
文件中:
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
您可以为您的映射创建一个文件夹并将其命名为 MappingProfiles
或您想要的任何名称。然后添加你的映射配置文件 classes,注意,class 应该继承自 AutoMapper
命名空间的 Profile
对象,并在构造函数中进行映射。
public class UserProfile : Profile
{
CreateMap<UserViewModel, User>();
}
在你的情况下,它不起作用,因为你做错了映射方向。你需要把它弄反了。
更改为:
MapperExpression.CreateMap(typeof(UserViewModel), typeof(User));
我正在尝试在我的 Asp.NET 5 Core 项目中使用 AutoMapper。
在我项目的启动文件中,我添加了以下内容
Type[] types = all scannable types...
services.AddAutoMapper((serviceProvider, MapperExpression) =>
{
// Not sure if this is needed
MapperExpression.ConstructServicesUsing(t => serviceProvider);
// Manually add the mapping without using a profile for now..
MapperExpression.CreateMap(typeof(User), typeof(UserViewModel));
}, types);
综上所述,我希望能够将UserViewModel
映射到User
。但是,我收到以下错误
AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types: Object -> User System.Object - User
这是我从控制器调用 AutoMapper 的方式
[ApiController]
public class UsersController : ControllerBase
{
private readonly IMapper _mapper;
public UsersController(IMapper mapper)
{
_mapper = mapper;
}
public async Task<ActionResult<DisplayUserViewModel>> Create([FromBody] UserViewModel viewModel)
{
User model = _mapper.Map<User>(viewModel);
//...
}
}
这是我的模型
public class UserViewModel
{
[Required]
public string Password { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string FirstName { get; set; }
public string MiddleName { get; set; }
[Required]
public string LastName { get; set; }
}
public class User : IdentityUser<int>
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
如何将 AutoMapper 服务正确添加到我的 .Net 5 核心项目?
需要 2 个东西:
在
Startup.cs
文件中:services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
您可以为您的映射创建一个文件夹并将其命名为
MappingProfiles
或您想要的任何名称。然后添加你的映射配置文件 classes,注意,class 应该继承自AutoMapper
命名空间的Profile
对象,并在构造函数中进行映射。public class UserProfile : Profile { CreateMap<UserViewModel, User>(); }
在你的情况下,它不起作用,因为你做错了映射方向。你需要把它弄反了。
更改为:
MapperExpression.CreateMap(typeof(UserViewModel), typeof(User));