【问题标题】:Subdomain routing on MVC5 with Areas带有区域的 MVC 5 中的子域路由
【发布时间】:2016-03-16 19:05:38
【问题描述】:

我正在开发一个带有 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 中的子域值路由到我的区域?

请指教。谢谢。

【问题讨论】:

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


    【解决方案1】:

    选项 #1

    添加行:

    routeData.DataTokens["area"] = subdomain;
    

    选项 #2

    SubdomainRoute 中实现IRouteWithArea,并在Area 属性中返回subdomain 的值。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2011-03-17
      • 2021-02-25
      • 2015-08-04
      • 2013-03-12
      相关资源
      最近更新 更多