/// <summary> /// Handle Exception /// </summary> /// <param name="context">ExceptionContext</param> public void OnException(ExceptionContext context) { if (context == null) { return; } var data = new Dictionary <string, string>(); var statusCode = HttpStatusCode.InternalServerError; var message = string.Empty; var ex = context.Exception; TypeSwitch.Do( ex, TypeSwitch.Case <ArgumentException>(() => { statusCode = HttpStatusCode.BadRequest; }), TypeSwitch.Case <ArgumentNullException>(() => { statusCode = HttpStatusCode.BadRequest; }), TypeSwitch.Case <ArgumentOutOfRangeException>(() => { statusCode = HttpStatusCode.BadRequest; }), TypeSwitch.Case <KeyNotFoundException>(() => { statusCode = HttpStatusCode.NotFound; })); var err = new Models.ErrorPayload() { Data = data, StackTrace = ex.StackTrace, Message = ex.Message, StatusCode = (int)statusCode, }; this._logger.LogError(ex, err.ToString()); var response = context.HttpContext.Response; response.StatusCode = (int)statusCode; response.ContentType = "application/json"; response.WriteAsync(JsonConvert.SerializeObject(err)); }