我正在开发一个带有Areas的MVC5项目。我的计划是将这一个代码库发布到3个不同的IIS Web服务器中。我想过使用子域将用户路由到指定的应用程序。
区域(App1,App2,App3)
下面的子域类为我提供了URL子域,但我不知道如何将流量路由到正确的区域。
SubdomainRoute.cs
public class SubdomainRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
if (httpContext.Request == null || httpContext.Request.Url == null)
{
return null;
}
var host = httpContext.Request.Url.Host;
var index = host.IndexOf(".");
string[] segments = httpContext.Request.Url.PathAndQuery.TrimStart('/').Split('/');
if (index < 0)
{
return null;
}
var subdomain = host.Substring(0, index);
string[] blacklist = { "www", "demo", "mail" };
if (blacklist.Contains(subdomain))
{
return null;
}
string controller = (segments.Length > 0) ? segments[0] : "Home";
string action = (segments.Length > 1) ? segments[1] : "Index";
var routeData = new RouteData(this, new MvcRouteHandler());
routeData.Values.Add("controller", controller);
routeData.Values.Add("action", action);
routeData.Values.Add("subdomain", subdomain);
return routeData;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new SubdomainRoute());
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我从http://benjii.me/2015/02/subdomain-routing-in-asp-net-mvc/找到了这段代码,但我需要路由到区域。
如何使用SubdomainRoute.cs中的子域值路由到我的区域?
请指教。感谢。
答案 0 :(得分:0)
添加以下行:
routeData.DataTokens["area"] = subdomain;
在IRouteWithArea
中实施SubdomainRoute
,并在subdomain
媒体资源中返回Area
的值。