I have an ASP.NET MVC site running on .NET 4.0 which I am trying to set up error logging.
I discovered the Elmah.MVC NuGet package (v2.1.1, Elmah core: v1.2.1) and followed this tutorial to get it setup. (did not do Step5 - javascript error logging)
It is working correctly and sending me emails and logging 404 errors, but when I enter some html into an input <h1>Test</h1> to see how the site handles it I get a HttpRequestValidationException which is good in the sense that it wont let them enter it and I have an error page setup which gets displayed when the site has been published, but Elmah does not log the details of this kind of error.
I have looked at this SO post and the Elmah issue 217 says that it has been resolved.
This is my ElmahHandleErrorAttribute class:
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute { public override void OnException(ExceptionContext context) { base.OnException(context); var e = context.Exception; // Log only handled exceptions, because all other will be caught by ELMAH anyway. // from http://ivanz.com/2011/05/08/asp-net-mvc-magical-error-logging-with-elmah/ // did nothing // if (context.ExceptionHandled) // ErrorSignal.FromCurrentContext().Raise(context.Exception); if (!context.ExceptionHandled // if unhandled, will be logged anyhow || RaiseErrorSignal(e) // prefer signaling, if possible || IsFiltered(context)) // filtered? return; LogException(e); } private static bool RaiseErrorSignal(Exception e) { var context = HttpContext.Current; if (context == null) return false; var signal = ErrorSignal.FromContext(context); if (signal == null) return false; signal.Raise(e, context); return true; } private static bool IsFiltered(ExceptionContext context) { var config = context.HttpContext.GetSection("elmah/errorFilter") as ErrorFilterConfiguration; if (config == null) return false; var testContext = new ErrorFilterModule.AssertionHelperContext( context.Exception, HttpContext.Current); return config.Assertion.Test(testContext); } private static void LogException(Exception e) { var context = HttpContext.Current; ErrorLog.GetDefault(context).Log(new Error(e, context)); } } Which I have referenced in my FilterConfig.cs:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new ElmahHandleErrorAttribute()); filters.Add(new HandleErrorAttribute()); } Is there a known workaround so that I can make Elmah log and email details of these kinds of errors?
thanks.