Посредник Api вызова не удалось - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь сделать простой запрос с использованием медиатора и ядра .net.Я получаю ошибку, которую не понимаю.Все, что я делаю, это простой вызов, чтобы вернуть guid.

BaseController:

[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
            };
        }

Это исключение, которое я получаю: enter image description here

Пожалуйстадайте мне знать, что еще вам нужно, чтобы определить, в чем может быть проблема.Также будь добр, я некоторое время был далеко от c #.

1 Ответ

0 голосов
/ 28 декабря 2018

Спасибо за информацию, что это был отсутствующий DI.Я добавил это

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

, и мы готовы идти.

...