如何检查异常对象的 InnerException 属性 是否为空?
How can I check if the InnerException property of the Exception object is null?
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Error.aspx.cs" Inherits="XEx21HandleErrors.Error" %>
<asp:Content ContentPlaceHolderID="mainPlaceholder" runat="server">
<h1 class="text-danger">An error has occurred</h1>
<div class="alert alert-danger">
<p><asp:Label ID="lblError" runat="server"></asp:Label></p>
</div>
<asp:Button ID="btnReturn" runat="server" Text="Return to Order Page"
PostBackUrl="~/Order.aspx" CssClass="btn btn-danger" />
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace XEx21HandleErrors
{
public partial class Error : System.Web.UI.Page
{
private Exception ex;
protected void Page_Load()
{
if (ex.InnerException == null)
{
lblError.Text = ex.Message;
}
else ex.InnerException;
}
}
}
大家好,
我正在处理一个应用程序,我想在其中检查异常对象的 InnerException 属性 是否为 null.If 是,显示异常对象的消息 属性 .
否则,显示由 InnerException 属性 返回的异常对象的消息 属性。这是我到目前为止所拥有的。为了做到这一点,我创建了一个 Page_Load 事件处理程序,但我被困在了其他部分。有人能帮我吗?我还包含了错误页面,以防有人想确切知道此异常错误消息将显示在何处。
.NET 实际上有一种方法可以解决您的问题,而无需您自己进行测试。
你可以这样做:
var rootCause = ex.GetBaseException();
lblError.Text = rootCause.Message;
GetBaseException()
实际上会为您递归地沿着 InnerException
链走下去,直到到达最后一个 InnerException
为空的异常。
如果您只需要一条 InnerException 消息,您可以访问它
if (ex.InnerException == null)
{
lblError.Text = ex.Message;
}
else
{
lblError.Text = ex.InnerException.Message;
}
或更短
lblError.Text = ex.InnerException?.Message ?? ex.Message;
但 InnerException
中的异常也可能包含 InnderException
。如果你想访问最深的一个,你可以使用以下递归方法:
static string UnwrapExceptionMessage(Exception ex)
{
return ex.InnerException != null ? UnwrapExceptionMessage(ex.InnerException) : ex.Message;
}
lblError.Text = UnwrapExceptionMessage(ex);
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Error.aspx.cs" Inherits="XEx21HandleErrors.Error" %>
<asp:Content ContentPlaceHolderID="mainPlaceholder" runat="server">
<h1 class="text-danger">An error has occurred</h1>
<div class="alert alert-danger">
<p><asp:Label ID="lblError" runat="server"></asp:Label></p>
</div>
<asp:Button ID="btnReturn" runat="server" Text="Return to Order Page"
PostBackUrl="~/Order.aspx" CssClass="btn btn-danger" />
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace XEx21HandleErrors
{
public partial class Error : System.Web.UI.Page
{
private Exception ex;
protected void Page_Load()
{
if (ex.InnerException == null)
{
lblError.Text = ex.Message;
}
else ex.InnerException;
}
}
}
大家好,
我正在处理一个应用程序,我想在其中检查异常对象的 InnerException 属性 是否为 null.If 是,显示异常对象的消息 属性 . 否则,显示由 InnerException 属性 返回的异常对象的消息 属性。这是我到目前为止所拥有的。为了做到这一点,我创建了一个 Page_Load 事件处理程序,但我被困在了其他部分。有人能帮我吗?我还包含了错误页面,以防有人想确切知道此异常错误消息将显示在何处。
.NET 实际上有一种方法可以解决您的问题,而无需您自己进行测试。
你可以这样做:
var rootCause = ex.GetBaseException();
lblError.Text = rootCause.Message;
GetBaseException()
实际上会为您递归地沿着 InnerException
链走下去,直到到达最后一个 InnerException
为空的异常。
如果您只需要一条 InnerException 消息,您可以访问它
if (ex.InnerException == null)
{
lblError.Text = ex.Message;
}
else
{
lblError.Text = ex.InnerException.Message;
}
或更短
lblError.Text = ex.InnerException?.Message ?? ex.Message;
但 InnerException
中的异常也可能包含 InnderException
。如果你想访问最深的一个,你可以使用以下递归方法:
static string UnwrapExceptionMessage(Exception ex)
{
return ex.InnerException != null ? UnwrapExceptionMessage(ex.InnerException) : ex.Message;
}
lblError.Text = UnwrapExceptionMessage(ex);