1

重複の可能性:
URL で RouteData を取得するには?

public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            var url = httpContext.Request.Headers["HOST"];
            var index = url.IndexOf(".");

            if (index < 0)
                return null;

            var subDomain = url.Substring(0, index);

            if (subDomain != "www" && subDomain != "m")
            {
                var routeData = new RouteData(this, new MvcRouteHandler());
                    routeData.Values.Add("controller", "Business"); 
                    routeData.Values.Add("action", "Display"); 
                    routeData.Values.Add("id", subDomain);
                return routeData;
            }

            if (subDomain == "m")
            {
                var routeData = new RouteData(this, new MvcRouteHandler());
                routeData.Values.Add("controller", "Mobile"); 
                routeData.Values.Add("action", "Index"); 

                return routeData;
            }

            return null;
        }

私の問題は、アクセスxyz.mydomain.comすると常に に再ルーティングされることxyz.mydomain.com/Business/Display/xyzです。xyz.mydomain.com/Overviewこれは、サブドメインを取得してリダイレクトしているため、私が行くのを妨げています.

ifステートメントを使用してコントローラーが指定されているかどうかを判断しようとしましたが、何も機能していないようです。助言がありますか?

4

1 に答える 1

0

他の誰かが答えを必要とする場合に備えて、これは私の解決策でした...
これsubstrings.Length >= 3はコントローラー用であり、アクションなので、コントローラーのみが必要な場合は2に変更します。

public override RouteData GetRouteData(HttpContextBase httpContext)
            {
                var host = httpContext.Request.Headers["HOST"];
                var url = httpContext.Request.RawUrl;
                Regex regex = new Regex("/");
                string[] substrings = regex.Split(url);
                if (substrings.Length >= 3)
                {
                    return null;
                }
                var index = host.IndexOf(".");
                if (index < 0)
                {
                    return null;
                }

                var subDomain = host.Substring(0, index);

                if (subDomain != "www" && subDomain != "m")
                {
                    var routeData = new RouteData(this, new MvcRouteHandler());
                        routeData.Values.Add("controller", "Business"); //Goes to the User1Controller class
                        routeData.Values.Add("action", "Display"); //Goes to the Index action on the User1Controller
                        routeData.Values.Add("id", subDomain);
                    return routeData;
                }

                if (subDomain == "m")
                {
                    var routeData = new RouteData(this, new MvcRouteHandler());
                    routeData.Values.Add("controller", "Mobile"); //Goes to the User2Controller class
                    routeData.Values.Add("action", "Index"); //Goes to the Index action on the User2Controller

                    return routeData;
                }
                return null;
            }
于 2012-05-16T23:55:56.337 に答える