在ASP.NET中向用户显示预期错误

Mik*_*ike 6 c# asp.net error-handling exception-handling

我已经找到了大量关于如何使用Page_Error和Application_Error方法以及Web.config中的customErrors指令处理ASP.NET中的意外错误的信息(即这个).

但是,我的问题是处理EXPECTED错误的最佳方法是什么.例如,我有一个页面来显示记录.每条记录都有一个允许查看它的特定用户列表.由于许多用户可能具有不在列表中的"查看记录"角色,因此我必须在页面上编写一些代码来过滤它们.

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

处理此类错误的最佳做法是什么?我可以想到几个可能性:

  1. 重定向到错误页面.
  2. 在每个名为"lblErrorText"的页面上放置一个标签.除非出现错误,请将其留空.
  3. 提出异常并让标准错误处理处理它.

这感觉就像一个基本的问题,为此我道歉,但几乎我发现的一切都是关于意外的例外.并不是上述任何一种可能性都难以实现,但如果可能的话,我想使用标准的推荐方法.

注意:感谢大家的答案.我想澄清一下,用户无法点击链接到允许他们查看的记录.这个问题更有利于防守.例如,由于记录ID在URL中,因此某人可能会在地址栏中输入禁止记录的ID.或者允许的用户A可以通过电子邮件发送给用户B的链接.似乎我可能没有以正确的方式使用"异常"和"错误"这两个词,但希望这种情况有意义.

Cyl*_*Cat 5

为了优雅地失败,我会选择在页面上显示消息.

更好的是防止错误; 如果您提前知道用户将无法在页面上执行任何操作,请不要提供指向该页面的链接.通常,用户应该只看到他们被允许做的事情.