【发布时间】:2020-04-20 06:19:54
【问题描述】:
我有一个使用 .NET core 3.1 的 WebApi。我不确定这是否不是最佳实践,或者是否有其他方法可以做到这一点。但是,我有一个包含 3 个 get 动词的 WebApi。
1. 全部搞定。
2. 按 ID 获取。
3. 通过搜索字符串获取。
如果我只有 2 个,get all 并按 id 获得,但一旦我有 3 个,按字符串获得,我得到一个错误。然后当我大摇大摆地去测试时,我得到了,
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: 请求匹配多个端点。匹配:
代码:
[ApiController]
[Route("api/v1/[controller]")]
public class ProfessionalLocalController : ControllerBase
{
private IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public ProfessionalLocalController(IUnitOfWork unitOfWork, IMapper mapper)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
}
[HttpGet]
public async Task<IActionResult> Get()
{
var profLocals = await _unitOfWork.ProfessionalLocalUsers.GetAllAsync();
return Ok(_mapper.Map<IEnumerable<ProfessionalLocalDto>>(profLocals));
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
var localUser = await _unitOfWork.ProfessionalLocalUsers.GetAsync(id);
if (localUser == null)
{
return NotFound();
}
return Ok(_mapper.Map<ProfessionalLocalDto>(localUser));
}
[HttpGet("{searchText}", Name = "Search")]
public async Task<IActionResult> Get(string searchText)
{
var localUsers = await _unitOfWork.ProfessionalLocalUsers.FindAsync(temp => temp.UserID.ToString().Contains(searchText));
return Ok(_mapper.Map<IEnumerable<ProfessionalLocalDto>>(localUsers));
}
}
【问题讨论】:
标签: c# asp.net-web-api asp.net-core-webapi asp.net-core-3.1