在.NET MVC路由问题 [英] Routing issues in .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 toxyz.mydomain.com/Business/Display/xyz
. This is preventing me from going toxyz.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...
Thesubstrings.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屋!