Отображение ожидаемых ошибок для пользователей в ASP.NET

Я нашел огромное количество информации (например, this ) о том, как обрабатывать неожиданные ошибки в ASP.NET, используя Методы Page_Error и Application_Error, а также директива customErrors в Web.config.

Однако мой вопрос в том, как лучше всего обрабатывать ОЖИДАЕМЫЕ ошибки. Например, у меня есть страница для отображения записи. Каждая запись имеет определенный список пользователей, которым разрешено ее просматривать. Поскольку у многих пользователей может быть роль «Просмотр записей», которых нет в указанном списке, мне нужно написать код на странице для их фильтрации.

protected void Page_Load(object sender, EventArgs e)
{
    var user = Membership.GetUser();
    if (!CanUserViewThisRecord(Request["id"], user.Username)
    {
        // Display an error to the user that says,
        // "You are not allowed to view this message", and quit.
    }
    else
    {
        // Display the page.
    }
}

Каковы наилучшие методы обработки ошибок такого рода? Я могу придумать несколько возможностей:

  1. Перенаправить на страницу с ошибкой.
  2. Поместить метку на каждую страницу с именем «lblErrorText». Оставьте поле пустым, если нет ошибки.
  3. Вызовите исключение и позвольте стандартной обработке ошибок справиться с этим.

Это похоже на простой вопрос, и за это я прошу прощения, но почти все, что я нашел, было в отношении неожиданных исключений. Дело не в том, что какие-либо из перечисленных выше возможностей трудно реализовать, но я бы хотел использовать стандартный рекомендуемый метод, если это возможно.

ПРИМЕЧАНИЕ: Спасибо всем за ответы. Я хочу уточнить, что пользователи НЕ будут иметь возможность нажимать ссылки на записи, которые им разрешено просматривать. Этот вопрос больше в интересах защиты. Например, поскольку идентификатор записи находится в URL-адресе, кто-то потенциально может ввести идентификатор запрещенной записи в адресную строку. Или пользователь A, которому разрешено, может отправить ссылку по электронной почте пользователю B, которому нет. Кажется, я неправильно использую слова «исключение» и «ошибка», но, надеюсь, этот сценарий имеет смысл.

6
задан Mike 14 February 2011 в 15:41
поделиться