private void ClearHttpContext(HttpContextBase context, int statusCode)
 {
     context.Response.StatusCode = statusCode;
     context.ClearError();
     context.Response.Clear();
     context.Response.TrySkipIisCustomErrors = true;
 }
        public void HandleError(HttpContextBase context, int statusCode)
        {
            var currentError = context.Error;

            if (currentError.IsNull()) return;

            #if DEBUG
            Debugger.Break();
            #endif

            this.LogException(currentError);

            if (!context.IsCustomErrorEnabled || !UseCustomErrors(context.Request.IsLocal)) return;

            var httpException = currentError as HttpException;
            if (httpException != null) statusCode = httpException.GetHttpCode();

            context.Response.SetStatus(statusCode);

            _errorViewRenderer.Render(context, statusCode, currentError);

            context.ClearError();

            context.Response.TrySkipIisCustomErrors = true;
        }
Beispiel #3
0
        public override void OnError(HttpContextBase context)
        {
            Exception e = context.Server.GetLastError().GetBaseException();
            HttpException httpException = e as HttpException;
            int statusCode = (int)HttpStatusCode.InternalServerError;

            if (httpException != null)
            {
                statusCode = httpException.GetHttpCode();
            }

            ILog log;

            if (!Ioc.TryGet(out log))
            {
                log = new NullLogger();
            }

            if (httpException != null)
            {
                switch (statusCode)
                {
                    case (int)HttpStatusCode.NotFound:
                        log.Warning(this, "Http Error: `{0}`, Request path: `{1}`", statusCode, context.Request.AppRelativeCurrentExecutionFilePath);
                        break;
                    default:
                        log.Error(this, "Http Error: `{0}`, Request path: `{1}`", statusCode, context.Request.AppRelativeCurrentExecutionFilePath);
                        break;
                }
            }
            else
            {
                log.Error(this, "Web application error: `{0}`, Request path: `{1}`", e, context.Request.AppRelativeCurrentExecutionFilePath);
            }

            string redirectUrl = null;

            if (context.IsCustomErrorEnabled)
            {
                CustomErrorsSection section = (CustomErrorsSection) ConfigurationManager.GetSection("system.web/customErrors");

                if (section != null)
                {
                    redirectUrl = section.DefaultRedirect;

                    if (httpException != null)
                    {
                        if (section.Errors.Count > 0)
                        {
                            CustomError item = section.Errors[statusCode.ToString()];

                            if (item != null)
                            {
                                redirectUrl = item.Redirect;
                            }
                        }
                    }
                }

                context.Response.Clear();
                context.Response.StatusCode = statusCode;
                context.Response.TrySkipIisCustomErrors = true;

                context.ClearError();

                if (!redirectUrl.IsNullOrEmpty())
                {
                    //context.Response.Redirect(redirectUrl);
                    context.Server.Transfer(redirectUrl);
                }
            }
        }