通常 Web 應用程式發布後,為給用戶友好介面與體驗,錯誤發生時會導向自訂錯誤頁面,而非 ASP.NET 暴露的詳細例外清單。
簡單錯誤處理頁面可透過 web.config 設定:
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
若想透過程式設計方式呈現錯誤原因,可用 Page_Error 事件。
另一種方式透過 Global.asax 實現,我覺得較方便,若結合獨立友好頁面則更舒適:
void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string error = "發生異常頁: " + Request.Url.ToString() + "<br>";
error += "異常資訊: " + objErr.Message + "<br>";
Server.ClearError();
Application["error"] = error;
Response.Redirect("~/ErrorPage/ErrorPage.aspx");
}
ErrorPage.aspx
protected void Page_Load(object sender, EventArgs e)
{
ErrorMessageLabel.Text = Application["error"].ToString();
}
當最終用戶使用應用程式時,可能不想知道錯誤原因,可透過核取方塊決定是否呈現錯誤原因。將 Label 放在 div 中,用核取方塊決定是否顯示 div。
<script language="javascript" type="text/javascript">
<!--
function CheckError_onclick() {
var chk = document.getElementById("CheckError");
var divError = document.getElementById("errorMsg");
if(chk.checked)
{
divError.style.display = "inline";
}
else
{
divError.style.display = "none";
}
}
// -->
</script>

我們可以對 errorpage 這頁做更親切設計,讓人看起來更舒服。