我在API控制器方法中获得一个列表,并将其传递给Handler,如下所示。我打算做的是循环遍历列表并将列表的所有项保存到DB中。
public class Create
{
public class Command : IRequest
{
public Guid A { get; set; }
public string B { get; set; }
public string C { get; set; }
public bool D { get; set; }
}
public class Handler : IRequestHandler<List<Command>>
{
private readonly DataContext _context;
private readonly IMapper _mapper;
public Handler(DataContext context, IMapper mapper)
{
_mapper = mapper;
_context = context;
}
public async Task<Unit> Handle(List<Command> request, CancellationToken cancellationToken)
{
// loop over the request list and save in the database
}
}
}
然而,在代码行'Handler
‘下有一个红线:public class Handler : IRequestHandler<List<Command>>
。
在“Handler
”上方盘旋,上面写着:
类型'System.Collections.Generic.List‘不能用作泛型类型或方法'IRequestHandler’中的类型参数'TRequest‘。没有从'System.Collections.Generic.List‘到'MediatR.IRequest’的隐式引用转换。应用程序(CS0311)
我的API控制器方法是:
[HttpPost]
public async Task<ActionResult<Unit>> Create(List<Create.Command> commands) // not like this, it'll be a list
{
return await Mediator.Send(commands);
}
return await Mediator.Send(commands);
下的红线上写着:
不能隐式地将类型'object‘转换为'Microsoft.AspNetCore.Mvc.ActionResult’。存在显式转换(是否缺少强制转换?)APIcsharp(CS0266)
如果我在写问题的时候漏掉了一些信息,请放心,我会不断更新询问。
发布于 2020-06-04 17:30:30
所以我最终是如何解决这个问题的:
步骤1:与命令类中的道具不同,在命令类所在的同一个Create.cs类中有一个嵌套类:
public class CreateDto
{
public Guid A { get; set; }
public string B { get; set; }
public string C { get; set; }
public bool D { get; set; }
}
步骤2:将是命令类。命令类现在将是:
public class Command : IRequest
{
public List<CreateDto> SomeObjects { get; set; }
}
步骤3:处理程序类将变成:
public class Handler : IRequestHandler<Command>
{
private readonly DataContext _context;
private readonly IMapper _mapper;
public Handler(DataContext context, IMapper mapper)
{
_mapper = mapper;
_context = context;
}
public async Task<Unit> Handle(Command request, CancellationToken cancellationToken)
{
foreach (var obj in request.SomeObjectss)
{
// logic
}
return Unit.Value;
}
}
步骤4:控制器方法将变成:
[HttpPost]
public async Task<ActionResult<Unit>> Create(List<CreateDto> createDtos)
{
return await Mediator.Send(new Create.Command{SomeObjects = createDtos});
}
https://stackoverflow.com/questions/62195463
复制相似问题