/// <summary>
        /// Short URLs and moved pages are stored in a database. See whether there's a match, and redirect.
        /// </summary>
        /// <param name="requestedUrl">The requested URL.</param>
        private bool TryShortOrMovedUrl(Uri requestedUrl)
        {
            try
            {
                // Try to match the requested URL to a redirect and, if successful, run handlers for the redirect
                var matchers = new IRedirectMatcher[] { new SqlServerRedirectMatcher()
                                                        {
                                                            ThrowErrorOnMissingConfiguration = false
                                                        } };
                var handlers = new IRedirectHandler[] { new ConvertToAbsoluteUrlHandler(), new PreserveQueryStringHandler(), new DebugInfoHandler(), new GoToUrlHandler() };

                foreach (var matcher in matchers)
                {
                    var redirect = matcher.MatchRedirect(requestedUrl);
                    if (redirect != null)
                    {
                        foreach (var handler in handlers)
                        {
                            redirect = handler.HandleRedirect(redirect);
                        }
                        return(true);
                    }
                }
            }
            catch (SqlException ex)
            {
                // If there's a problem, publish the error and continue to show 404 page
                ex.ToExceptionless().Submit();
            }
            return(false);
        }
Beispiel #2
0
 public HttpStatusController(IEastSussexGovUKTemplateRequest templateRequest, IViewModelDefaultValuesProvider defaultModelValues, INotFoundRequestPathResolver notFoundRequestPathResolver, IRedirectMatcher redirectMatcher, IConvertToAbsoluteUrlHandler convertToAbsoluteUrlHandler, IPreserveQueryStringHandler preserveQueryStringHandler)
 {
     _templateRequest             = templateRequest;
     _defaultModelValues          = defaultModelValues;
     _notFoundRequestPathResolver = notFoundRequestPathResolver;
     _redirectMatcher             = redirectMatcher;
     _convertToAbsoluteUrlHandler = convertToAbsoluteUrlHandler;
     _preserveQueryStringHandler  = preserveQueryStringHandler;
 }
        private void RedirectsModule_BeginRequest(object sender, EventArgs e)
        {          
            try
            {
                // If the requested path exists, or it's too long for MapPath to handle, do nothing
                try
                {
                    if (File.Exists(HostingEnvironment.MapPath(HttpContext.Current.Request.Url.AbsolutePath)))
                    {
                        return;
                    }
                }
                catch (PathTooLongException)
                {

                    return;
                }

                // If the requested path matches an ignored pattern, do nothing
                if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["Escc.Redirects.IgnorePaths"]))
                {
                    var ignorePaths = ConfigurationManager.AppSettings["Escc.Redirects.IgnorePaths"].Split(',');
                    foreach (var ignorePath in ignorePaths)
                    {
                        if (Regex.IsMatch(HttpContext.Current.Request.Url.PathAndQuery, ignorePath, RegexOptions.IgnoreCase))
                        {
                            return;
                        }
                    }
                }

                // Try to match the requested URL to a redirect and, if successful, run handlers for the redirect
                var matchers = new IRedirectMatcher[] {new SqlServerRedirectMatcher()};
                var handlers = new IRedirectHandler[] {new ConvertToAbsoluteUrlHandler(), new PreserveQueryStringHandler(), new DebugInfoHandler(), new GoToUrlHandler()};

                foreach (var matcher in matchers)
                {
                    var redirect = matcher.MatchRedirect(HttpContext.Current.Request.Url);
                    if (redirect != null)
                    {
                        foreach (var handler in handlers)
                        {
                            redirect = handler.HandleRedirect(redirect);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // If there's a problem, publish the error and continue
                ex.ToExceptionless().Submit();
            }
        }
        private void RedirectsModule_BeginRequest(object sender, EventArgs e)
        {
            try
            {
                // If the requested path exists, or it's too long for MapPath to handle, do nothing
                try
                {
                    if (File.Exists(HostingEnvironment.MapPath(HttpContext.Current.Request.Url.AbsolutePath)))
                    {
                        return;
                    }
                }
                catch (PathTooLongException)
                {
                    return;
                }

                // If the requested path matches an ignored pattern, do nothing
                if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["Escc.Redirects.IgnorePaths"]))
                {
                    var ignorePaths = ConfigurationManager.AppSettings["Escc.Redirects.IgnorePaths"].Split(',');
                    foreach (var ignorePath in ignorePaths)
                    {
                        if (Regex.IsMatch(HttpContext.Current.Request.Url.PathAndQuery, ignorePath, RegexOptions.IgnoreCase))
                        {
                            return;
                        }
                    }
                }

                // Try to match the requested URL to a redirect and, if successful, run handlers for the redirect
                var matchers = new IRedirectMatcher[] { new SqlServerRedirectMatcher() };
                var handlers = new IRedirectHandler[] { new ConvertToAbsoluteUrlHandler(), new PreserveQueryStringHandler(), new DebugInfoHandler(), new GoToUrlHandler() };

                foreach (var matcher in matchers)
                {
                    var redirect = matcher.MatchRedirect(HttpContext.Current.Request.Url);
                    if (redirect != null)
                    {
                        foreach (var handler in handlers)
                        {
                            redirect = handler.HandleRedirect(redirect);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // If there's a problem, publish the error and continue
                ex.ToExceptionless().Submit();
            }
        }