使用区域

时间:2016-03-16 19:05:39

标签: asp.net-mvc-5 asp.net-mvc-areas

我正在开发一个带有Areas的MVC5项目。我的计划是将这一个代码库发布到3个不同的IIS Web服务器中。我想过使用子域将用户路由到指定的应用程序。

  • 服务器1 - App1.myweb.com
  • 服务器2 - App2.myweb.com
  • 服务器3 - App3.myweb.com

区域(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中的子域值路由到我的区域?

请指教。感谢。

1 个答案:

答案 0 :(得分:0)

选项#1

添加以下行:

routeData.DataTokens["area"] = subdomain;

选项#2

IRouteWithArea中实施SubdomainRoute,并在subdomain媒体资源中返回Area的值。