Как вернуть более конкретный HTTP-код (например, 401.X)

Здесь приведена статья о некоторых расширенных HTTP-кодах:

IIS 7.0, IIS 7.5 и IIS 8.0 определяют несколько кодов состояния HTTP, которые указывают на более конкретную причину ошибки 401. Следующие конкретные Коды состояния HTTP отображаются в браузере клиента, но не отображается в журнале IIS:

  • 401.1 - Ошибка входа в систему.
  • 401.2 - Ошибка входа в систему из-за конфигурации сервера.
  • 401.3 - Несанкционированное из-за ACL на ресурсе.
  • 401.4 - Ошибка авторизации с помощью фильтра.
  • 401.5 - Ошибка авторизации с помощью приложения ISAPI/CGI.

Мне нужны некоторые пользовательские расширенные HTTP-коды, подобные этим:

  • 401.10 - Пользователь не найден
  • 401.11 - Несоответствие пароля пользователя
  • 401.12 - Учетная запись пользователя заблокирована.
  • 401.13 - Учетная запись пользователя истекло
  • ...

Как вернуть эти расширенные коды ошибок 401 из приложения .NET MVC?

Ответы

Ответ 1

В вашем методе действий вы устанавливаете коды состояния вручную:

Response.StatusCode = 401;
Response.SubStatusCode = 10;

Кроме того, вы можете использовать перечисление HttpStatusCode в System.Net:

Response.StatusCode = (int)HttpStatusCode.Unauthorized;

Ответ 2

Как вернуть эти расширенные коды ошибок 401 из приложения .NET MVC?

Вы не можете вернуть их из своего приложения в том смысле, что пользователь получит их, так как HTTP не поддерживает коды подстановки.

Они используются только для ведения журнала и трассировки IIS, возвращается только "основной" код состояния.

Ответ 3

Используйте Response.StatusCode и Response.SubStatusCode