我正在开发一个公开 RESTful API 的 asp.net core 2.2 后端。
当前的实现工作正常(为清楚起见删除了额外的代码):
namespace Sppd.TeamTuner.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly ITeamTunerUserService _userService;
private readonly ITokenProvider _tokenProvider;
private readonly IAuthorizationService _authorizationService;
private readonly IMapper _mapper;
public UsersController(ITeamTunerUserService userService, ITokenProvider tokenProvider, IAuthorizationService authorizationService, IMapper mapper)
{
_userService = userService;
_tokenProvider = tokenProvider;
_authorizationService = authorizationService;
_mapper = mapper;
}
[HttpGet]
public async Task<IActionResult> GetByUserId(Guid userId)
{
// TODO: secure this call
var user = _userService.GetByIdAsync(userId);
return Ok(_mapper.Map<UserDto>(await user));
}
}
}
单个 API 方法适用于 URL https://localhost:5001/Users?userId=4AF29C4A-282A-4FB8-8691-9D44398A97F2
现在我想添加第二种方法:
[HttpGet]
public async Task<IActionResult> GetByTeamId(Guid teamId)
{
// TODO: secure this call
var users = _userService.GetByTeamIdAsync(teamId);
return Ok(_mapper.Map<IEnumerable<UserDto>>(await users));
}
这将导致 URL https://localhost:5001/Users?teamId=4AF29C4A-282A-4FB8-8691-9D44398A97F2(请注意,与第一次调用相比,参数是 teamId 而不是 userId)。
问题:
- 这是一个 SwaggerUI 问题吗?意思是控制器会以其他方式工作吗?
- 用户或团队控制器是否应该公开获取所有团队用户的方法?我们按团队 ID 查询并返回用户。
- 如果它保留在用户控制器中,那么拥有唯一端点的“最佳”方式是什么?
森栏
尚方宝剑之说
慕田峪9158850
慕桂英546537
相关分类