【发布时间】:2020-01-08 17:06:46
【问题描述】:
我正在使用 AspNetBoilerPlate Core,但在将项目列表映射到视图模型时遇到问题
我在应用层有这个 DTO
[AutoMapFrom(typeof(LeadMeta.LeadMeta))]
public class LeadMetaDto : EntityDto
{
public int LeadId { get; set; }
public int? TenantId { get; set; }
public string Key { get; set; }
public string Value { get; set; }
public string FriendlyKey { get; set; }
}
我想将它映射到 mvc 层中的相同视图模型,所以我从我的控制器执行以下操作
var lead = await _leadAppService.Get(Id);
enquiry.LeadMeta = new List<DashboardEnquiryMetaViewModel>(lead.LeadMeta);
这是 DashboardEnquiryMetaViewModel
[AutoMapFrom(typeof(LeadMetaDto))]
public class DashboardEnquiryMetaViewModel: LeadMetaDto
{
public DashboardEnquiryMetaViewModel(LeadMetaDto output)
{
output.MapTo(this);
}
}
但是我的尝试产生了以下错误:
信息 2019-09-05 19:16:47,551 [9] ore.Mvc.Internal.ControllerActionInvoker - 执行动作方法 PowerITCRM.Web.Controllers.LeadController.Dashboard (PowerITCRM.Web.Mvc) 带参数 (13005) - 验证状态:有效 错误 2019-09-05 19:16:48,427 [6] Mvc.ExceptionHandling.AbpExceptionFilter - 错误映射类型。
映射类型:IEnumerable
1 -> List1 System.Collections.Generic.IEnumerable1[[PowerITCRM.Features.Lead.LeadMetaDto, PowerITCRM.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List1[[PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel, PowerITCRM.Web.Mvc,版本=1.0.0.0,文化=中性, PublicKeyToken=null]] AutoMapper.AutoMapperMappingException: 错误 映射类型。映射类型:IEnumerable
1 -> List1 System.Collections.Generic.IEnumerable1[[PowerITCRM.Features.Lead.LeadMetaDto, PowerITCRM.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List1[[PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel, PowerITCRM.Web.Mvc,版本=1.0.0.0,文化=中性, PublicKeyToken=null]] ---> System.ArgumentException: PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel 需要有 具有 0 个参数或只有可选参数的构造函数。参数名称:类型 在 lambda_method(闭包,IEnumerable1 , List1,ResolutionContext ) --- 内部异常堆栈跟踪结束 --- at lambda_method(闭包,IEnumerable1 , List1,ResolutionContext)
在 AutoMapper.Mapper.AutoMapper.IMapper.Map[TSource,Tdestination](TSource 源,TDestination 目的地)在 C:\projects\automapper\src\AutoMapper\Mapper.cs:第 271 行 PowerITCRM.Web.Controllers.LeadController.Dashboard(Int32 Id) 在 C:\Users\User\Documents\Visual Studio 2017\Projects\PowerITCRM\src\PowerITCRM.Web.Mvc\Controllers\LeadController.cs:line 126 at lambda_method(Closure, Object) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper 映射器,ObjectMethodExecutor 执行器,对象控制器,Object[] 论据)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext 上下文)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态& next, Scope& 范围, Object& 状态, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync() 信息 2019-09-05 19:16:48,434 [6] ore.Mvc.Internal.ControllerActionInvoker - 执行的动作 PowerITCRM.Web.Controllers.LeadController.Dashboard (PowerITCRM.Web.Mvc) 在 898.9158ms 错误 2019-09-05 19:16:48,618 [6
] nostics.DeveloperExceptionPageMiddleware - 未处理的异常 执行请求时发生。 AutoMapper.AutoMapperMappingException: 错误映射类型。映射类型:IEnumerable
1 -> List1 System.Collections.Generic.IEnumerable1[[PowerITCRM.Features.Lead.LeadMetaDto, PowerITCRM.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List1[[PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel, PowerITCRM.Web.Mvc,版本=1.0.0.0,文化=中性, PublicKeyToken=null]] ---> System.ArgumentException: PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel 需要有 具有 0 个参数或只有可选参数的构造函数。参数名称:类型 在 lambda_method(闭包,IEnumerable1 , List1,ResolutionContext ) --- 内部异常堆栈跟踪结束 --- at lambda_method(闭包, IEnumerable1 , List1, ResolutionContext)
在 AutoMapper.Mapper.AutoMapper.IMapper.Map[TSource,Tdestination](TSource 源,TDestination 目的地)在 C:\projects\automapper\src\AutoMapper\Mapper.cs:第 271 行 PowerITCRM.Web.Controllers.LeadController.Dashboard(Int32 Id) 在 C:\Users\User\Documents\Visual Studio 2017\Projects\PowerITCRM\src\PowerITCRM.Web.Mvc\Controllers\LeadController.cs:line 126 at lambda_method(Closure, Object) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper 映射器,ObjectMethodExecutor 执行器,对象控制器,Object[] 论据)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext 上下文)在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态& next, Scope& 范围, Object& 状态, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ExceptionContext 上下文)在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(状态和下一个, 范围&作用域、对象&状态、布尔& isCompleted)在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文)在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(状态和下一个, 范围&作用域、对象&状态、布尔& isCompleted)在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
在 Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) 在 PowerITCRM.Authentication.JwtBearer.JwtTokenMiddleware.c__DisplayClass0_0.d.MoveNext() 在 C:\Users\User\Documents\Visual Studio 2017\Projects\PowerITCRM\src\PowerITCRM.Web.Core\Authentication\JwtBearer\JwtTokenMiddleware.cs:line 22 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext 上下文)在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)调试 2019-09-05 19:16:48,713 [9] Abp.AspNetCore.SignalR.Hubs.AbpCommonHub - 客户端断开连接: fpR1HzE9UYrEMvP_yNR28w 信息 2019-09-05 19:16:48,758 [13] soft.AspNetCore.Hosting.Internal.WebHost - 请求完成 4111.2398ms 101 INFO 2019-09-05 19:16:48,854 [6] soft.AspNetCore.Hosting.Internal.WebHost - 请求完成 1333.083ms 500 文本/html;字符集=utf-8
【问题讨论】:
-
PowerITCRM.Web.Models.Lead.DashboardEnquiryMetaViewModel 需要有一个带有 0 个参数或只有可选参数的构造函数。显然没有。
-
你能提供一个有效的例子吗,我有点迷茫。
标签: c# asp.net-core automapper aspnetboilerplate