2011-02-14 30 views
6

我发现了如何处理ASP.NET中的意外错误(使用Page_Error和Application_Error方法以及Web中的customErrors指令)的大量信息(即this)。配置。在ASP.NET中向用户显示预期的错误

但是,我的问题是处理预期错误的最佳方法是什么。例如,我有一个页面来显示记录。每条记录都有一个允许查看的用户的特定列表。由于许多用户可能具有不在所述列表上的“查看记录”角色,因此我必须在页面上编写一些代码来对其进行过滤。

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. 引发异常并让标准错误处理处理它。

这感觉就像是一个基本问题,为此我表示歉意,但几乎所有我发现的内容都引用了意外的例外。这并不是说上述任何一种可能性都很难实现,但如果可能的话,我想使用标准的推荐方法。

注意:谢谢大家的答案。我想澄清一下,用户将无法点击允许查看的记录链接。这个问题更多的是为了防守。例如,由于记录ID在URL中,所以有人可能会在地址栏中输入禁止记录的ID。或者被允许的用户A可以通过电子邮件发送到不是用户B的链接。看来我可能不会正确地使用“例外”和“错误”这两个词,但希望这种情况是有道理的。

回答

5

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

更好的是错误预防;如果您事先知道用户无法在页面上执行任何操作,请不要提供指向该页面的链接。一般来说,用户应该只看到他们被允许做的事情。

+0

用户永远不会看到他们不允许查看的页面的链接,但该记录的ID在URL中。我试图阻止某人可能会手动修改URL以包含不允许的记录ID的情况。这是我在这里处理的情况。我想我可以做的就是尝试在母版页上放置一个“错误文本”控件,这样我就不必修改每一页来完成这项工作。 – Mike 2011-02-14 15:33:55

+1

+1用于防止错误评论。如果预计你应该已经做了一些事情,那么'预期错误'有点矛盾。恕我直言,手动更改URL但不是预期的。我会认为这是一个例外,与您在URL中输入不存在的ID的用户一样。 – 2011-02-14 15:34:48

0

在你的三个选项中,第三个选项是我最不喜欢的。用户尝试查看您告诉他的记录并不是一个例外。重定向到错误页面更为合理,错误标签也是如此。但是,两者都不是特别用户友好的。

我不知道你的用户界面是如何构建的,但在我看来,如果你知道用户不被允许查看它,你不应该让用户尝试查看记录。也就是说,如果您知道用户无法查看该记录,则不要让他有机会点击该记录。永远不要到你必须说的地步,“你不能查看这个记录。”

如果你不能阻止用户试图查看记录,我认为弹出消息框会比前两个选项中的任何一个更好。

1

正如其他人提到的,我希望在发送之前避免这种情况,要么禁用这些用户的功能,要么在发送页面之前用javascript捕获它。

你仍然需要检查允许用户利用一个控制的服务器上,而在这种情况下,建议标签将是最好的解决方案,考虑到其他3。

然而,进一步的解决方案是向页面提供一个隐藏值,该页面通过页面内的javascript进行检查,从而生成警告或更容易发现的错误对话,而不是某处可能会遗漏的标签,导致混淆为什么没有发生。根据提问者的意见

编辑:如果修改URL的数量是所有需要指向记录用户未经授权使用,会后也许是一个更好的方法比GET使用?这种方式处理这个错误并不重要,因为没有标准的用户会遇到它。

0
在我看来

这个问题是比较方法论然后高科技..

我觉得更多的是展示近对象/操作导致错误的错误信息的权利。

,如果你送他到另一个页面,他将失去对方向,它并不清楚什么原因这个错误。

所以在我看来是把错误信息在同一页中更多的权利。 也许给他机会纠正..