Friday, July 1, 2016

How to handle the global level exceptions in MVC5.

Introduction

How to handle the global level exceptions in MVC.

Background

Handle the exception in MVC5

Using the code

Follw the below procedure and code.
-> Need to create the one class file common "GlobalExceptionFilter.cs".
-> Register the GlobalExceptionFilter class in Startup.cs file.
Once will get the exception it will hit the OnException mentod globally in that will get all the information about the exception like
  • ClassName
  • ErrorMessage
  • Failurepoint
  • Function
  • Module
  • StackTrace
After that watever we want will do that like need to call WCF service or any method to call to save exception info.
Blocks of code should be set as style "Formatted" like this:
 public class GlobalExceptionFilter : IExceptionFilter
    {
        private readonly ILogger _logger = AppLogger.CreateLogger<GlobalExceptionFilter>();


        public GlobalExceptionFilter() { }


        public void OnException(ExceptionContext context)
        {
            AlertService alertService = new AlertService();
            if (context == null || context.Exception == null)
                return;


            var exceptionContentForLog = context.Exception.Message;

            _logger.LogError(exceptionContentForLog);
            _logger.LogError(context.Exception.StackTrace);
            AppLogger.LogFileWrite(exceptionContentForLog, context.Exception);
            bool isServiceError = true;
            try
            {
                var faultException = (System.ServiceModel.FaultException)context.Exception;
            }
            catch (Exception ex)
            {
                isServiceError = false;

            }
            finally
            {
                if (isServiceError)
                {
                    context.Result = new HttpStatusCodeResult(403);
                }
                else
                {
                    SendEmailAfterException(alertService, context.Exception, null);
                    context.Result = new HttpStatusCodeResult(500);
                }
            }
        }

        private void SendEmailAfterException(AlertService alertService, Exception appException, System.ServiceModel.FaultException serviceException)
        {
            CustomException custException = new CustomException();

            var traceInfo = new Byte[200];
            var userinfo = string.Empty;
            var result = HttpContextHelper.HttpContext.Session.TryGetValue("ExceptionTracingDetails", out traceInfo);
            userinfo = ASCIIEncoding.ASCII.GetString(traceInfo);
            string[] data = userinfo.Split(',');

            if (appException != null)
            {
                custException.ApplicationName = AppSettings.ApplicationName;
                custException.ErrorMessage = appException.Message;
                custException.InputParameters = appException.Data.ToString();
                if (data[0] != null)
                    custException.Email = data[0];
                if (data[1] != null)
                    custException.FirstName = data[1];
                if (data[2] != null)
                    custException.LastName = data[2];
                custException.StackTrace = appException.StackTrace;
                custException.Failurepoint = appException.Source.ToString();
                custException.ClassName = appException.TargetSite.ReflectedType.Name;
                custException.Function = appException.TargetSite.Name;
                custException.Module = appException.TargetSite.Module.ToString();

            }
            else
            {
                custException.ApplicationName = AppSettings.ApplicationName;
                custException.ClassName = serviceException.TargetSite.ReflectedType.Name;
                custException.ErrorMessage = serviceException.Message;
                custException.Failurepoint = serviceException.Source.ToString();
                custException.Function = serviceException.TargetSite.Name;
                custException.InputParameters = serviceException.Data.ToString();
                custException.Module = serviceException.TargetSite.Module.ToString();
                custException.StackTrace = serviceException.StackTrace;
            }
            ConcertoHealth.Business.Entities.EmailParams parameter = new Business.Entities.EmailParams();
            parameter.CustomException = custException;
            alertService.NotifyUser(parameter, Core.Enum.EnumMailType.Exception);
        }


    } 

public void ConfigureServices(IServiceCollection services)
 {
           services.AddMvc(options =>
            {
                options.Filters.Add(new GlobalExceptionFilter());
            });
 } 

No comments:

Post a Comment