コード例 #1
0
        /// <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));
        }