首页 > 解决方案 > 中介 Api 调用失败

问题描述

我正在尝试使用调解器和 .net 核心发出一个简单的请求。我收到一个我不理解的错误。我想要做的只是一个简单的调用来取回一个 guid。

基础控制器:

[Route("api/[controller]/[action]")]
[ApiController]
public class BaseController : Controller
{
    private IMediator _mediator;
    protected IMediator Mediator => _mediator ?? (_mediator = HttpContext.RequestServices.GetService<IMediator>());
}

控制器:

// GET: api/Customer/username/password
[HttpGet("{username}/{password}", Name = "Get")]
public async Task<ActionResult<CustomerViewModel>> Login(string username, string password)
{
    return Ok(await Mediator.Send(new LoginCustomerQuery { Username = username,Password = password }));
}

询问:

public class LoginCustomerQuery : IRequest<CustomerViewModel>
{
    public string Username { get; set; }
    public string Password { get; set; }
}

查看型号:

 public class CustomerViewModel
 {
     public Guid ExternalId { get; set; }
 }

处理程序:

public async Task<CustomerViewModel> Handle(LoginCustomerQuery request, CancellationToken cancellationToken)
{
    var entity = await _context.Customers
        .Where(e =>
        e.Username == request.Username
        && e.Password == Encypt.EncryptString(request.Password))
        .FirstOrDefaultAsync(cancellationToken);
     if (entity.Equals(null))
     {
         throw new NotFoundException(nameof(entity), request.Username);
     }

     return new CustomerViewModel
     {
         ExternalId = entity.ExternalId
     };
 }

这是我得到的例外: 在此处输入图像描述

请让我知道您还需要什么来确定可能是什么问题。另外,请客气,我已经离开 c# 一段时间了。

标签: asp.net-web-api.net-coremediator

解决方案


感谢您提供信息,这是缺少的 DI。我添加了这个

// Add MediatR
            services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPreProcessorBehavior<,>));
            services.AddMediatR(typeof(LoginCustomerQueryHandler).GetTypeInfo().Assembly);

我们可以走了。


推荐阅读