我有属于公司实体的Widget实体。 公司和Widgets之间是一对多的关系。
这是我第一次使用Get方法。
[Route("MyApi/Companies/{companyId}/WidgetAdministration/[controller]")]
[HttpGet("{widgetId}")]
public async Task<ActionResult<WidgetDTO>> GetWidget([FromRoute] int companyId, [FromRoute]int widgetId)
{
WidgetDTO widgetDto = await _myContext.Widgets
.Where(w => w.CompanyId == companyId && w.WidgetId == widgetId)
.AsNoTracking()
.ProjectTo<WidgetDTO>(_mapper.ConfigurationProvider)
.FirstOrDefaultAsync();
if (widgetDto == null)
{
return NotFound();
}
else
{
return Ok(widgetDto);
}
}
如果一个关联到 "公司1 "的用户请求 "公司1 Widget 55",但 "Widget 55 "属于 "公司2",我应该返回什么?
404NotFound - 由于 "Widget 55 "属于 "Company 2",所以即使 "Widget 55 "真的存在,上述LINQ语句也不会找到任何东西。
401NotAuthorized - 由于 "Widget 55 "不属于 "公司1","公司1 "无权查看。
400BadRequest - 这只是一个不好的要求,因为Widget和Company不匹配。
顺便说一句,谁能推荐一个好的资源来帮助我解决其他类似的情况?
我会返回404,有两个原因。
Widget/55
但对整个资源URI。Company/1/Widget/55
. 该资源不存在。Widget/55
存在。你可能会接受,也可能不会接受。根据万维网联盟(W3C)的规定。"如果服务器不希望向客户端提供这些信息,可以使用状态码404(未找到)代替。"