Debugging errors can be difficult, especially when you need to see the errors inside the errors.

This post shows you how you can get all errors as a collection of errors rather than them being hidden inside other errors.

You can create an extension method like this one:

using System;
using System.Collections.Generic;

namespace PaulSeal.Library.Utility
{
public static class Extensions
{
public static IEnumerable<Exception> FlattenHierarchy(this Exception ex)
{
if (ex == null)
{
throw new ArgumentNullException("ex");
}

var innerException = ex;
do
{
yield return innerException;
innerException = innerException.InnerException;
}
while (innerException != null);
}
}
}

 

It iterates through the errors and retrieves any innerExceptions until there are no more errors.

I only really use this for debugging as I wouldn't normally want the customer to see these error messages. Here is an example of it in use:

 

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitContactForm(ContactModel model)
{
if (!ModelState.IsValid) return CurrentUmbracoPage();
else
{
try
{
SendEmail(model);
TempData["EmailSuccess"] = true;
}
catch (Exception ex)
{
//use the extension method here to find all of the errors and output them to the validation summary.
ex.FlattenHierarchy().ToList().ForEach(x => ModelState.AddModelError("EmailError", x.Message));
return CurrentUmbracoPage();
}

return RedirectToCurrentUmbracoPage();
}
}

private void SendEmail(ContactModel model)
{
//some code for sending an email
}

I originally found this solution here

Paul Seal

Umbraco MVP and .NET Web Developer from Derby (UK) who specialises in building Content Management System (CMS) websites using MVC with Umbraco as a framework. Paul is passionate about web development and programming as a whole. Apart from when he's with his wife and son, if he's not writing code, he's thinking about it or listening to a podcast about it.

Proudly sponsored by

Moriyama

  • Moriyama build, support and deploy Umbraco, Azure and ASP.NET websites and applications.
AppVeyor

  • CI/CD service for Windows, Linux and macOS
  • Build, test, deploy your apps faster, on any platform.
elmah.io

  • elmah.io is the easy error logging and uptime monitoring service for .NET.
  • Take back control of your errors with support for all .NET web and logging frameworks.
uSync Complete

  • uSync.Complete gives you all the uSync packages, allowing you to completely control how your Umbraco settings, content and media is stored, transferred and managed across all your Umbraco Installations.
uSkinned

  • More than a theme for Umbraco CMS, take full control of your content and design with a feature-rich, award-nominated & content editor focused website platform.
UmbHost

  • Affordable, Geo-Redundant, Umbraco hosting which gives back to the community by sponsoring an Umbraco Open Source Developer with each hosting package sold.