我有属于Company实体的Widget实体。公司和小部件之间存在一对多关系。
这是我第一次通过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小部件55”,但“小部件55”属于“公司2”,我应该返回什么?
404 / NotFound -由于“小部件55”属于“公司2”,因此即使“小部件55”确实存在,上述LINQ语句也不会找到任何内容。
401 /未授权-由于“小部件55”不属于“公司1”,因此“公司1”无权查看。
400 / BadRequest -这只是一个错误的请求,因为Widget和Company不匹配。
顺便说一句,有人可以推荐一个好的资源来帮助我解决其他类似情况吗?
答案 0 :(得分:2)
出于以下两个原因,我将返回404:
<Switch>
,而是指整个资源URI:import matplotlib.pyplot as plt
import numpy as np
xval = [np.array([0, 1, 2, 3, 4]), np.array([5, 6, 7, 8, 9, 10]), np.array([11, 12, 13, 14, 15, 16, 17])]
all_runs = [np.random.randint(1, 10, len(xv)) for xv in xval]
total_len = sum([len(xv) for xv in xval])
for ses in range(len(all_runs)):
if len(all_runs[ses]) > 0:
plt.plot(xval[ses], all_runs[ses], '.-', color='tab:blue')
# if ses > 0:
# plt.axvline(xval[ses][0] - 0.5, ls=':', lw=1, color='purple')
plt.xticks(range(total_len), [i for xv in xval for i in range(len(xv))])
ax = plt.gca()
ax.set_xticks([xv[0] + 0.1 for xv in xval if len(xv) > 0], minor=True)
ax.set_xticklabels([f'session {i}' for i, xv in enumerate(xval) if len(xv) > 0], minor=True)
ax.tick_params(axis='x', which='minor', length=0, pad=18)
for tick in ax.xaxis.get_minor_ticks():
tick.label1.set_horizontalalignment('left')
plt.show()
。该资源不存在。Widget/55
存在的事实。您可能会接受也可能不会接受。 According to the World Wide Web Consortium (W3C),“如果服务器不希望将此信息提供给客户端,则可以改用状态代码404(未找到)。”