ASP.NET MVC子域

 沉佩颖岳玲 发布于 2023-02-10 10:56

我有这样的托管和域名:

www.EXAMPLE.com

我创建了几个这样的子域:

www.PAGE1.EXAMPLE.com
www.PAGE2.EXAMPLE.com
www.PAGE3.EXAMPLE.com
... etc...

所有这些子域都指向同一个ASP.NET MVC 5应用程序.

我想制作根据子域加载数据的系统.例:

我有文章对象,可以是汽车评论或游戏评论或书评等...

我想www.auto.example.com加载文章类型为Auto的数据,到www.book.example.com我想加载类型为Book等的数据.

将有许多类型的页面.

这样做的最佳做法是什么?

顶级域名www.example.com应该显示其他内容.这将是其他人的主页.

2 个回答
  • 您可以通过编写自定义路径来完成此操作.这是如何(改编自可以基于子域制作ASP.NET MVC路由?)

    public class SubdomainRoute : RouteBase
    {
    
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            var host = httpContext.Request.Url.Host;
            var index = host.IndexOf(".");
            string[] segments = httpContext.Request.Url.PathAndQuery.Split('/');
    
            if (index < 0)
                return null;
    
            var subdomain = host.Substring(0, index);
            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); //Goes to the relevant Controller  class
            routeData.Values.Add("action", action); //Goes to the relevant action method on the specified Controller
            routeData.Values.Add("subdomain", subdomain); //pass subdomain as argument to action method
            return routeData;
        }
    
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            //Implement your formating Url formating here
            return null;
        }
    }
    

    像这样添加到Global.asax.cs中的路由表:

    routes.Add(new SubdomainRoute());
    

    而你的控制器方法:

    public ActionResult Index(string subdomain)
    {
        //Query your database for the relevant articles based on subdomain
        var viewmodel = MyRepository.GetArticles(subdomain);
        Return View(viewmodel);
    }
    

    2023-02-10 10:59 回答
  • 这是我想用ASP.NET MVC做很长时间的事情,但是......这不是ASP.NET MVC负责的问题.这是服务器问题(IIS).您需要做的是允许IIS服务器上的通配符子域并将它们指向您的一个应用程序.

    然后你可以用HttpContext做这样的事情:

    HttpContext.Current.Request.Url.Host // user1.yourwebsite.com
    

    然后你只需要解析它并将其推送到你认为合适的ASP.NET MVC应用程序中:

    将其推入Session

    更新当前路由数据并输入值

    等等....

    选择取决于你.

    注意:这里的缺点是,这会使本地开发变得越来越困难,因此您可能想要模拟在应用程序中伪造子域的方法.

    2023-02-10 11:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有