在.NET MVC路由问题 [英] Routing issues in .NET MVC

查看:181
本文介绍了在.NET MVC路由问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

可能重复:结果
  如何通过URL获得的RouteData?


 公众覆盖的RouteData GetRouteData(HttpContextBase的HttpContext)
        {
            VAR URL = httpContext.Request.Headers [HOST];
            变种指数= url.IndexOf(。);            如果(指数℃下)
                返回null;            VAR子域= url.Substring(0,指数);            如果(子域=WWW&放大器;!&安培;!子域=M)
            {
                VAR的RouteData =新的RouteData(这一点,新MvcRouteHandler());
                    routeData.Values​​.Add(控制器,业务);
                    routeData.Values​​.Add(行动,显示);
                    routeData.Values​​.Add(ID,子域);
                返回的RouteData;
            }            如果(子域==M)
            {
                VAR的RouteData =新的RouteData(这一点,新MvcRouteHandler());
                routeData.Values​​.Add(控制器,手机);
                routeData.Values​​.Add(行动,指数);                返回的RouteData;
            }            返回null;
        }

我的问题是,当我访问 xyz.mydomain.com 它总是被重新路由到 xyz.mydomain.com/Business/Display/xyz 。这是$ P $从去 xyz.mydomain.com/Overview ,因为它是拿起子和重定向pventing我。

我一直在使用如果语句,以确定是否指定了控制器尝试,但似乎没有任何工作。有什么建议?


解决方案

以防万一别人需要的答案,这是我的解决方案...

substrings.Length> = 3 是一个控制器,然后一个动作,使更改为2,如果你只需要一个控制器:

 公众覆盖的RouteData GetRouteData(HttpContextBase的HttpContext)
            {
                VAR主机= httpContext.Request.Headers [HOST];
                VAR URL = httpContext.Request.RawUrl;
                正则表达式的regex ​​=新的正则表达式(/);
                字符串[] =子regex.Split(URL);
                如果(substrings.Length> = 3)
                {
                    返回null;
                }
                变种指数= host.IndexOf(。);
                如果(指数℃下)
                {
                    返回null;
                }                VAR子域= host.Substring(0,指数);                如果(子域=WWW&放大器;!&安培;!子域=M)
                {
                    VAR的RouteData =新的RouteData(这一点,新MvcRouteHandler());
                        routeData.Values​​.Add(控制器,业务); //业大User1Controller类
                        routeData.Values​​.Add(行动,显示); //转到上User1Controller Index操作
                        routeData.Values​​.Add(ID,子域);
                    返回的RouteData;
                }                如果(子域==M)
                {
                    VAR的RouteData =新的RouteData(这一点,新MvcRouteHandler());
                    routeData.Values​​.Add(控制器,手机); //业大User2Controller类
                    routeData.Values​​.Add(行动,指数); //转到上User2Controller Index操作                    返回的RouteData;
                }
                返回null;
            }

Possible Duplicate:
How to get RouteData by URL?

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;
        }

My problem is that when I access xyz.mydomain.com it is always rerouted to xyz.mydomain.com/Business/Display/xyz. This is preventing me from going to xyz.mydomain.com/Overview as it's picking up the subdomain and redirecting.

I have tried using if statements to determine if a controller is specified, but nothing seems to work. Any suggestions?

解决方案

Just in case anyone else needs an answer this was my solution...
The substrings.Length >= 3 is for a controller then an action so change to 2 if you only need a controller :

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;
            }

这篇关于在.NET MVC路由问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆