Коды состояния HTTP - 401 / NotAuthorized vs 404 / NotFound vs 400 / BadRequest - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть объекты виджетов, которые принадлежат объектам компании. Между компаниями и виджетами существует отношение один ко многим.

Вот мой первый проход в методе 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 - Поскольку" Widget 55 "принадлежит" Company 2 ", вышеприведенный оператор LINQ ничего не найдет, даже если" Widget 55 «действительно существует.

401 / NotAuthorized - Поскольку «Виджет 55» не принадлежит «Компании 1», «Компания 1» не имеет права на его просмотр.

400 / BadRequest - Это просто неверный запрос, поскольку виджет и компания не совпадают.

Кроме того, кто-нибудь может порекомендовать хороший ресурс, чтобы помочь мне с другими подобными сценариями ios?

1 Ответ

2 голосов
/ 27 апреля 2020

Я бы вернул 404 по двум причинам:

  1. На мой взгляд, 404 относится не к Widget/55, а ко всему URI ресурса: Company/1/Widget/55. Этот ресурс не существует.
  2. A 403 запрещает Компании 1 просматривать виджеты Компании 2, но он раскрывает тот факт, что Widget/55 существует. Это может или не может быть приемлемым для вас. Согласно данным World Wide Web Consortium (W3 C) , «если сервер не может sh предоставить эту информацию клиенту, можно использовать код состояния 404 (не найден) вместо этого. "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...