2011-02-14 52 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
在我看來

這個問題是比較方法論然後高科技..

我覺得更多的是展示近對象/操作導致錯誤的錯誤信息的權利。

,如果你送他到另一個頁面,他將失去對方向,它並不清楚什麼原因這個錯誤。

所以在我看來是把錯誤信息在同一頁中更多的權利。 也許給他機會糾正..