Отображение ожидаемых ошибок для пользователей в ASP.NET - PullRequest
6 голосов
/ 14 февраля 2011

Я нашел огромное количество информации (например, 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, кто-то может ввести идентификатор запрещенной записи в адресную строку.Либо пользователь А, которому разрешено, может отправить по электронной почте ссылку на пользователя Б, которого нет.Возможно, я не правильно использую слова «исключение» и «ошибка», но, надеюсь, сценарий имеет смысл.

Ответы [ 4 ]

5 голосов
/ 14 февраля 2011

В целях изящного отказа я бы выбрал вариант отображения сообщения на странице.

Еще лучше предотвращение ошибок;если вы заранее знаете, что пользователь не сможет ничего сделать на странице, не указывайте ссылку на него.Как правило, пользователи должны видеть только то, что им разрешено делать.

1 голос
/ 14 февраля 2011

Как уже упоминали другие, я бы предпочел предотвратить это до того, как он будет отправлен, либо отключив функциональность для этих пользователей, либо перехватив его с помощью javascript перед отправкой страницы.

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

Тем не менее, еще одним решением будет предоставитьскрытое значение для страницы, которое проверяется javascript на странице, генерируя либо предупреждение, либо более легко обнаруживаемое диалоговое окно с ошибкой, чем метка, которую можно пропустить, что может привести к путанице в отношении того, почему ничего не произошло.на комментарии спрашивающего: если изменение числа в URL-адресе - это все, что требуется для указания на записи, которые пользователь не имеет права использовать, POST, возможно, будет лучшим способом для использования, чем GET?таким образом, способ обработки этой ошибки менее важен, поскольку ни один стандартный пользователь не столкнется с ней.

0 голосов
/ 14 февраля 2011

на мой взгляд, этот вопрос больше методологии, чем технологии ..

я думаю, что правильнее показать сообщение об ошибке рядом с объектом / действием, которое вызывает ошибку.

если вы отправите его на другую страницу, он потеряет ориентацию, и неясно, что является причиной этой ошибки.

так что на мой взгляд правильнее поставить сообщение об ошибке на той же странице. и, возможно, дать ему возможность исправить ..

0 голосов
/ 14 февраля 2011

Из трех ваших вариантов третий будет моим наименее любимым. Для пользователя не является исключением попытка просмотреть запись, которую, как вы сказали, он там находился. Перенаправление на страницу с ошибкой более разумно, как и метка ошибки. Однако ни один из них не особенно удобен для пользователя.

Я не знаю, как устроен ваш пользовательский интерфейс, но мне кажется, что вы не должны позволять пользователю пытаться просмотреть запись, если вы знаете, что пользователю не разрешено ее просматривать. То есть, если вы знаете, что пользователь не может просмотреть эту запись, не предоставляйте ему возможность нажать на нее. Никогда не доходите до того момента, когда вы скажете: «Вы не можете просматривать эту запись».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...