【发布时间】:2020-04-28 06:43:21
【问题描述】:
我有属于公司实体的小部件实体。 Companies 和 Widget 之间存在一对多的关系。
这是我第一次使用 Get 方法:
[Route("MyApi/Companies/{companyId}/WidgetAdministration/[controller]")]
[HttpGet]
public async Task<ActionResult<List<WidgetDTO>>> GetWidgets([FromRoute] int companyId)
{
// get company
var company = await _xyvidContext.Companies
.Where(c => c.CompanyId == companyId)
.AsNoTracking()
.Include(c => c.Widgets)
.FirstOrDefaultAsync();
if (company == null)
{
return NotFound();
}
// get corresponding Widgets
List<WidgetDTO> widgetDtos = company.Widgets
.AsQueryable()
.ProjectTo<WidgetDTO>(_mapper.ConfigurationProvider)
.ToList();
if (widgetDtos == null)
{
return StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError);
}
else if (widgetDtos.Count == 0)
{
return NoContent();
}
else
{
return Ok(widgetDtos);
}
}
很明显,如果公司未找到,无论是软删除还是从未存在,我都应该返回 404/NotFound,对吗?
如果我请求查看属于公司 1 的所有小部件,但公司 1 没有小部件,我应该返回什么?
404/NotFound - 未找到任何小部件。
204/NoContent - 未找到小部件,因此没有要返回的内容
200/Ok with Empty Array - 没有发生错误,但我们发现的是一个空数组,所以只需返回它。
【问题讨论】:
标签: c# get api-design http-status-codes