asp.net-web-api - 中介 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# 一段时间了。
解决方案
感谢您提供信息,这是缺少的 DI。我添加了这个
// Add MediatR
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPreProcessorBehavior<,>));
services.AddMediatR(typeof(LoginCustomerQueryHandler).GetTypeInfo().Assembly);
我们可以走了。
推荐阅读
- ms-word - 在 Word 中显示方程式编号的域代码
- php - 如何在没有 UI 的情况下通过代码更改元素或小部件的内容
- c# - SignalR 客户端使用机器上的所有端口
- java - 使用 JPA createQuery() 获取数百万条记录时超出 GC 开销限制;
- android - Cordova android build 没有准备好启动设备
- python - 如何使用 Python 从 pdf 文件中提取特定的文本块?
- python - 如何测试熊猫系列是否包含在熊猫数据框的行中
- tensorflow - 编译失败:尝试编译图 get_loss_cond_1_true_88089_rewritten[] 时检测到不支持的操作
- r - R:基于列名计算的函数
- laravel - Laravel 如果使用 wherebetween,数据不显示全部