예제 #1
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var          request = (FrontHttpRequestWrapper)filterContext.HttpContext.Request;
            RedirectType redirectType;
            string       inputUrl = request.RequestUrl;

            if (string.IsNullOrEmpty(inputUrl))
            {
                inputUrl = "/";
            }
            if (!string.IsNullOrEmpty(request.Url.Query))
            {
                inputUrl = inputUrl + request.Url.Query;
            }
            string redirectUrl;

            if (UrlMapperFactory.Default.Map(Site.Current, inputUrl, out redirectUrl, out redirectType))
            {
                filterContext.Result = RedirectHelper.CreateRedirectResult(Site.Current, request.RequestChannel, redirectUrl, null, null, redirectType);
            }
        }
예제 #2
0
        protected override void OnException(ExceptionContext filterContext)
        {
            Kooboo.HealthMonitoring.Log.LogException(filterContext.Exception);

            HttpErrorStatusCode statusCode    = HttpErrorStatusCode.InternalServerError_500;
            HttpException       httpException = filterContext.Exception as HttpException;

            if (httpException != null)
            {
                statusCode = (HttpErrorStatusCode)httpException.GetHttpCode();
            }
            if (Site != null)
            {
                var customError = Services.ServiceFactory.CustomErrorManager.Get(Site, statusCode.ToString());

                if (customError != null)
                {
                    var errorUrl = customError.RedirectUrl;

                    if (!string.IsNullOrEmpty(errorUrl) && !errorUrl.TrimStart('~').TrimStart('/').TrimEnd('/').EqualsOrNullEmpty(this.Request.AppRelativeCurrentExecutionFilePath.TrimStart('~').TrimStart('/').TrimEnd('/'), StringComparison.OrdinalIgnoreCase))
                    {
                        filterContext.Result           = RedirectHelper.CreateRedirectResult(Site, FrontHttpRequest.RequestChannel, errorUrl, Request.RawUrl, (int)statusCode, customError.RedirectType);
                        filterContext.ExceptionHandled = true;
                    }
                }
            }
            else
            {
                if (statusCode == HttpErrorStatusCode.NotFound_404)
                {
                    filterContext.Result           = RedirectTo404();
                    filterContext.ExceptionHandled = true;
                }
            }
            base.OnException(filterContext);
        }