2017-11-30 3 views
0

ExceptionオブジェクトのInnerExceptionプロパティが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; 
 
     } 
 
    } 
 
}

こんにちはすべて、

私は、ExceptionオブジェクトのInnerExceptionプロパティがnullであるかどうかを確認したいアプリケーションに取り組んでいます。表示されている場合は、ExceptionオブジェクトのMessageプロパティを表示します。 それ以外の場合は、InnerExceptionプロパティによって返されたExceptionオブジェクトのMessageプロパティを表示します。ここまで私がこれまで持っていたことがあります。私は尋ねるために、私はPage_Loadイベントハンドラを作成しましたが、私はelse部分で立ち往生しています。誰か助けてくれますか?誰かがこの例外エラーメッセージがどこに表示されるかを正確に知りたい場合に備えて、エラーページも含めました。

答えて

0

あなたもInnderExceptionが含まれている可能性がInnerException

if (ex.InnerException == null) 
{ 
    lblError.Text = ex.Message; 
} 
else 
{ 
    lblError.Text = ex.InnerException.Message; 
} 

または短い

lblError.Text = ex.InnerException?.Message ?? ex.Message; 

しかし、例外として、それをアクセスすることができました。最も深いものにアクセスしたい場合は、再帰的な方法で使用できます。

static string UnwrapExceptionMessage(Exception ex) 
{ 
    return ex.InnerException != null ? UnwrapExceptionMessage(ex.InnerException) : ex.Message; 
} 

lblError.Text = UnwrapExceptionMessage(ex); 
0

.NETには実際に自分でテストすることなく、問題を解決する方法があります。

あなただけ行うことができます。それはInnerExceptionがnullの最後の例外に到達するまで

var rootCause = ex.GetBaseException(); 
lblError.Text = rootCause.Message; 

GetBaseException()は実際に、再帰的にあなたのためのInnerExceptionチェーンを歩きます。あなたのInnerExceptionのちょうどメッセージが必要な場合は

関連する問題