Acp.UseCanonicalNameModule.PreSendRequestHeaders C# (CSharp) Method

PreSendRequestHeaders() private method

private PreSendRequestHeaders ( object r_objSender, EventArgs r_objEventArgs ) : void
r_objSender object
r_objEventArgs System.EventArgs
return void
        private void PreSendRequestHeaders(object r_objSender, EventArgs r_objEventArgs)
        {
            _log.Debug("Beginning request handling");

            if (!_useCanonicalName)
            {
                _log.Debug("Not configured, returning");
                return;
            }

            // Create HttpApplication and HttpContext objects to access
            // request and response properties.
            HttpApplication application = (HttpApplication)r_objSender;
            HttpContext context = application.Context;
            int responseStatus = context.Response.StatusCode;

            bool responseIsRedirect = IsRedirectStatusCode(responseStatus);

            if (!responseIsRedirect)
            {
                _log.Debug("Response is not redirect, returning");
                return;
            }

            _log.Debug("Response is redirect and UseCanonical name is configured");
            _log.Debug("Response headers follow:");

            string requestHost = context.Request.ServerVariables["HTTP_HOST"];
            string locationUrl = GetRedirectUrl(context);

            // If request host matches canonical host there's nothing for us to do
            // TODO: Test if HTTP_HOST will always match host in location header

            if (requestHost == _canonicalServerName)
            {
                _log.Debug("Request host matches canonical server name" );
                return;
            }

            // TODO: Return if the server name is NOT found in the URL
            // i.e. return if locationUrl !~ /requestHost/

            string canonicalUrl = ReplaceHostInURL(locationUrl, _canonicalServerName);
            ReplaceLocationUrlInResponseHeaders(canonicalUrl, context);

            _log.Debug("Server name is " + _canonicalServerName);
            _log.Debug("Status Code is " + responseStatus);
            context.Response.AppendHeader("X-UseCanonicalName", Convert.ToString(_useCanonicalName));
            context.Response.AppendHeader("X-ServerName", _canonicalServerName);
        }