Search code examples
asp.net-mvcasp.net-mvc-3c#-4.0asp.net-mvc-4asp.net-mvc-routing

Incorrect redirect between action


I'm having some problems when the user wants to move to action games between domains. Organized at the local version of this:

mysite.com/subdomain1/webpage/show?url=about
mysite.com/subdomain2/webpage/show?url=about

Globally:

subdomain1.mysite.com/webpage/show?url=about
subdomain2.mysite.com/webpage/show?url=about

I want to make the user does not enter the main subdomain every time. For example: Current page - subdomain1.mysite.com/webpage/show?url=about. I want to see into subdomain2 similar page. I redirected user to subdomain2.mysite.com/. But i want to redirect user - subdomain2.mysite.com/webpage/show?url=about without transition at subdomain2.mysite.com

How can do it in ASP MVC and C#?


Solution

  • public static string ReplaceSubdomain(this HttpRequest request)
            {
                var urlReferrer = request.UrlReferrer.AbsoluteUri != null ? request.UrlReferrer.AbsoluteUri : string.Empty;
                // Get URl
                var url = request.Url.AbsoluteUri;
            #if DEBUG || APPS
                // Search local subdomain
                Regex child = new Regex(@"\b[0-9]?[.]?child[0-9]?");
                // if this request consist of subdomain
                if (child.IsMatch(urlReferrer) && child.IsMatch(url))
                {
                    // select subdomain
                    var matchUrlRef = child.Match(urlReferrer).ToString();
                    var matchUrl = child.Match(url).ToString();
                    // if subdomain are not equals
                    if ((matchUrlRef != matchUrl))
                    {
                        // single out link after local subdomain
                        var urlRefSub = urlReferrer.Remove(0, urlReferrer.IndexOf(matchUrlRef) + matchUrlRef.Length);
                        var urlSub = urlReferrer.Remove(0, url.IndexOf(matchUrl) + matchUrl.Length);
                        // validate link query after subdomain
                        // if different url query - replace subdomain
                        if (urlReferrer.Length > urlSub.Length)
                            return urlReferrer.Replace(urlRefSub, urlSub);
                    }
                }
                return url;
            #else
     
    
                //  Check if before page are existsand subdomain are equls
                if (!SubDomainRoute.GetSubdomain(urlReferrer).Equals(SubDomainRoute.GetSubdomain(url)))   
                    // if subdomain really exist for "child"
                    if (SubDomainRoute.GetSubdomain(urlReferrer).Contains("child") 
                            && SubDomainRoute.GetSubdomain(url).Contains("child"))
                        return url.Replace(SubDomainRoute.GetSubdomain(url),
                                                               SubDomainRoute.GetSubdomain(urlReferrer));
                return request.Url.AbsoluteUri;
            #endif
            }
    

    Sorry if i distract you and spend your time - I myself found the solution.