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;
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:


public ActionResult SubmitContactForm(ContactModel model)
if (!ModelState.IsValid) return CurrentUmbracoPage();
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 build, support and deploy Umbraco, Azure and ASP.NET websites and applications.

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

  • 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.

  • 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.

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