Extension methods for the HttpResponseExtensions class.

using System.Web;

namespace Extensions {

    public static class HttpResponseExtensions {

        /// <summary>
        /// Reloads the current page / handler by performing a redirect to the current url
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        public static void Reload(this HttpResponse self)
        {
            self.Redirect(HttpContext.Current.Request.Url.ToString(), true);
        }

        /// <summary>
        /// Performs a response redirect and allows the url to be populated
        /// with string format parameters.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="urlFormat">The URL including string.Format placeholders.</param>
        /// <param name="values">The values to the populated.</param>
        public static void Redirect(this HttpResponse self, string urlFormat, params object[] values)
        {
            self.Redirect(urlFormat, true, values);
        }

        /// <summary>
        /// Performs a response redirect and allows the url to be populated
        /// with string format parameters.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="urlFormat">The URL including string.Format
        /// placeholders.
        /// </param>
        /// <param name="endResponse">If set to <c>true</c> the response
        /// will be terminated.
        /// </param>
        /// <param name="values">The values to the populated.</param>
        public static void Redirect(this HttpResponse self, string urlFormat, bool endResponse, params object[] values)
        {
            var url = string.Format(urlFormat, values);
            self.Redirect(url, endResponse);
        }

        /// <summary>
        /// Performs a response redirect and allows the url to be populated
        /// with a query string.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="url">The URL.</param>
        /// <param name="queryString">The query string.</param>
        public static void Redirect(this HttpResponse self, string url, UriQueryString queryString)
        {
            self.Redirect(url, queryString, true);
        }

        /// <summary>
        /// Performs a response redirect and allows the url to be populated
        /// with a query string.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="url">The URL.</param>
        /// <param name="queryString">The query string.</param>
        /// <param name="endResponse">If set to <c>true</c> the response will
        /// be terminated.
        /// </param>
        public static void Redirect(this HttpResponse self, string url, UriQueryString queryString, bool endResponse)
        {
            url = queryString.ToString(url);
            self.Redirect(url, endResponse);
        }

        /// <summary>
        /// Returns a 404 to the client and ends the response.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        public static void SetFileNotFound(this HttpResponse self)
        {
            self.SetFileNotFound(true);
        }

        /// <summary>
        /// Returns a 404 to the client and optionally ends the response.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="endResponse">If set to <c>true</c> the response will
        /// be terminated.
        /// </param>
        public static void SetFileNotFound(this HttpResponse self, bool endResponse)
        {
            self.SetStatus(404, "Not Found", endResponse);
        }

        /// <summary>
        /// Returns a 500 to the client and ends the response.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        public static void SetInternalServerError(this HttpResponse self)
        {
            self.SetInternalServerError(true);
        }

        /// <summary>
        /// Returns a 500 to the client and optionally ends the response.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="endResponse">If set to <c>true</c> the response
        /// will be terminated.
        /// </param>
        public static void SetInternalServerError(this HttpResponse self, bool endResponse)
        {
            self.SetStatus(500, "Internal Server Error", endResponse);
        }

        /// <summary>
        /// Set the specified HTTP status code and description and optionally
        /// ends the response.
        /// </summary>
        /// <param name="self">The HttpResponse to perform on.</param>
        /// <param name="code">The status code.</param>
        /// <param name="description">The status description.</param>
        /// <param name="endResponse">If set to <c>true</c> the response
        /// will be terminated.
        /// </param>
        public static void SetStatus(this HttpResponse self, int code, string description, bool endResponse)
        {
            self.StatusCode = code;
            self.StatusDescription = description;

            if (endResponse)
            {
                self.End();
            }
        }

    }
}