Пример #1
0
        static CustomErrors()
        {
            _errors = new Hashtable();
            CustomErrorsSection section = (CustomErrorsSection)WebConfigurationManager.GetSection("system.web/customErrors");

            _mode            = section.Mode;
            _redirectMode    = section.RedirectMode;
            _defaultRedirect = section.DefaultRedirect;
            foreach (CustomError e in section.Errors)
            {
                if (!string.IsNullOrEmpty(e.Redirect))
                {
                    _errors.Add(e.StatusCode, e.Redirect);
                }
            }
            _ips = Dns.GetHostAddresses("localhost");
        }
Пример #2
0
        public void UpdateSection(
            CustomErrorsMode mode,
            CustomErrorsRedirectMode redirectMode,
            CustomErrorsRedirectType notFoundErrorRedirect,
            CustomErrorsRedirectType forbiddenErrorRedirect,
            CustomErrorsRedirectType serverErrorRedirect)
        {
            Mode = mode;
            RedirectMode = redirectMode;
            NotFoundErrorRedirect = notFoundErrorRedirect;
            ForbiddenErrorRedirect = forbiddenErrorRedirect;
            ServerErrorRedirect = serverErrorRedirect;

            _customErrorsSection.Mode = Mode.ToSystemCustomErrorsMode();
            _customErrorsSection.RedirectMode = RedirectMode.ToSystemCustomErrorsRedirectMode();

            SetCustomErrorsSectionErrors(
                _notFoundError.CreateCustomError(NotFoundErrorRedirect),
                _forbiddenError.CreateCustomError(ForbiddenErrorRedirect),
                _serverError.CreateCustomError(ServerErrorRedirect));
        }
 internal bool RedirectToErrorPage(string url, CustomErrorsRedirectMode redirectMode)
 {
     try
     {
         if (string.IsNullOrEmpty(url))
         {
             return false;
         }
         if (this._headersWritten)
         {
             return false;
         }
         if (this.Request.QueryString["aspxerrorpath"] != null)
         {
             return false;
         }
         if (redirectMode == CustomErrorsRedirectMode.ResponseRewrite)
         {
             this.Context.Server.Execute(url);
         }
         else
         {
             if (url.IndexOf('?') < 0)
             {
                 url = url + "?aspxerrorpath=" + HttpEncoderUtility.UrlEncodeSpaces(this.Request.Path);
             }
             this.Redirect(url, false);
         }
     }
     catch
     {
         return false;
     }
     return true;
 }
        //
        // Redirect to error page appending ?aspxerrorpath if no query string in the url.
        // Fails to redirect if request is already for error page.
        // Suppresses all errors.
        // See comments on RedirectToErrorPageStatus type for meaning of return values.
        //
        internal RedirectToErrorPageStatus RedirectToErrorPage(String url, CustomErrorsRedirectMode redirectMode) {
            const String qsErrorMark = "aspxerrorpath";

            try {
                if (String.IsNullOrEmpty(url))
                    return RedirectToErrorPageStatus.NotAttempted;   // nowhere to redirect

                if (_headersWritten)
                    return RedirectToErrorPageStatus.NotAttempted;

                if (Request.QueryString[qsErrorMark] != null)
                    return RedirectToErrorPageStatus.Failed;   // already in error redirect

                if (redirectMode == CustomErrorsRedirectMode.ResponseRewrite) {
                    Context.Server.Execute(url);
                }
                else {
                    // append query string
                    if (url.IndexOf('?') < 0)
                        url = url + "?" + qsErrorMark + "=" + HttpEncoderUtility.UrlEncodeSpaces(Request.Path);

                    // redirect without response.end
                    Redirect(url, false /*endResponse*/);
                }
            }
            catch {
                return RedirectToErrorPageStatus.Failed;
            }

            return RedirectToErrorPageStatus.Success;
        }