2016-06-09 3 views
0

Я отправляю электронное письмо с помощью smtp. Я использовал свойство InnerException в catch для обработки исключения. Моя проблема заключается в том, что я всегда получаю сообщение об ошибке «Ссылка на объект, не установленную на экземпляр объекта», каждый раз, когда он ловит исключение?Обработка ошибок с исключением C#

catch 
     { 

    HttpException ErrorType = Server.GetLastError() as HttpException; 

       Exception Error = ErrorType; 
      //Error line Object reference not set to an instance of an object. 
       if (ErrorType.InnerException != null) 
       Error = ErrorType.InnerException; 
       string ErrorName = Error.GetType().ToString(); 
       string ErrorMessage = Error.Message; 
       string ErrorTrace = Error.StackTrace; 

       const string ToAddress = "mail"; 
       const string FromAddress = "mail"; 
       const string Subject = "An error has just occurred!"; 

       // Mail Object 

       MailMessage Mail = new MailMessage("mail", "mail"); 
       Mail.Subject = "Error has ocurred!"; 
       Mail.IsBodyHtml = true; 
       Mail.Priority = MailPriority.High; 
       Mail.Body = string.Format(@" 

    <html> 
     <body> 
     <h1>An Error/Exception has just occurred </h1> 
    <table cellpadding=""5"" cellspacing=""0"" border=""1""> 
    <tr> 
     <tdtext-align: right;font-weight: bold"">URL:</td> 
     <td>{0}</td> 
     </tr> 
     <tr> 
      <tdtext-align: right;font-weight: bold"">User:</td> 
     <td>{1}</td> 
     </tr> 
     <tr> 
    <tdtext-align: right;font-weight: bold"">Exception Type:</td> 
    <td>{2}</td> 
     </tr> 
     <tr> 
      <tdtext-align: right;font-weight: bold"">Message:</td> 
     <td>{3}</td> 
     </tr> 
    <tr> 
    <tdtext-align: right;font-weight: bold"">Stack Trace:</td> 
    <td>{4}</td> 
    </tr> 
     </table> 
     </body> 
      </html>", 
      Request.RawUrl, 
      User.Identity.Name, 
      ErrorName, 
      ErrorMessage, 
      ErrorTrace.Replace(Environment.NewLine, "<br />")); 
       // Death Screen 
       string Markup = ErrorType.GetHtmlErrorMessage(); 
       if (!string.IsNullOrEmpty(Markup)) 
       { 

        Attachment attach = 
     Attachment.CreateAttachmentFromString(Markup, "attach.htm"); 
        Mail.Attachments.Add(attach); 

       } 

       // Send the exception mail 
       SmtpClient smtp = new SmtpClient(); 
       smtp.Send(Mail); 
       //lblMsg.Text = "Error!"; 
      } 

    } 
+1

Нет гарантии, что исключение будет иметь внутреннее исключение. Часто они этого не делают. – Crowcoder

+0

Из того, что я вижу, 'ErrorType' имеет значение null, что означает, что' Server.GetLastError() 'возвращает null или он возвратил объект, который нельзя отнести к' HttpException'. – Dirk

ответ

0

Что делать, если LastServerError не был HTTPException? Вызов Server.GetLastError() as HttpException в этом случае даст вам nul l.

+0

Благодарим за ответ, но как вы считаете лучшим решением в разных сценариях? – Dodi

+0

Вместо того, чтобы использовать Server.GetLastError() как исключение HttpException, это отличает Server.GetLastError() как исключение и выполняться. –

+0

В строке Markup = Errortype.GetLastError; Это дает мне ошибку! – Dodi