Asp.net mvc 这个合适吗;“最佳做法”;对于MVC路由?

Asp.net mvc 这个合适吗;“最佳做法”;对于MVC路由?,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,Asp.net Mvc Routing,我正在构建一个可供多个客户端使用的web应用程序。我们希望Client1的URL显示如下: routes.MapRoute( name: "Company", url: "{company}/{controller}/{action}/{id}", defaults: new {company = "", controller = "Home", action = "Index", id = UrlParam

我正在构建一个可供多个客户端使用的web应用程序。我们希望Client1的URL显示如下:

        routes.MapRoute(
            name: "Company",
            url: "{company}/{controller}/{action}/{id}",
            defaults: new {company = "", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

而对于Client2,它的外观如下所示:

        routes.MapRoute(
            name: "Company",
            url: "{company}/{controller}/{action}/{id}",
            defaults: new {company = "", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

等等。因此,我将路由表设置为如下所示:

        routes.MapRoute(
            name: "Company",
            url: "{company}/{controller}/{action}/{id}",
            defaults: new {company = "", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
这是第一个问题。到目前为止,有人看到我如何设置路由表的问题吗?如果有人指定公司名称“ClientX”,我希望确保执行第一个路由,否则,如果他们只指定控制器/操作,那么我希望执行第二个路由

我的下一个问题是,以我的方式获得他们指定的公司名称是否被视为不好的形式

我有一个基本控制器,在其初始化方法中,我执行以下操作:

        protected override void Initialize(RequestContext requestContext)
        {
          if(requestContext.RouteData.Values.ContainsKey("company"))
          {
            CompanyName = (string)requestContext.RouteData.Values["company"]; 
          }

        base.Initialize(requestContext);
        }
“公司名称”是一种财产:

public string CompanyName { get; private set; }

我以前从未在MVC中弄乱过默认路由(我从来没有必要这样做),我想确保我没有做愚蠢的事情

路由表还可以,这是MVC区域和Web API中通常的做法。这里一切都好

不过,在控制器中初始化company并不是坏事,只是通常您会向action方法添加一个名为company of type string的操作参数。如果控制器中的所有或许多操作都需要这一点信息,那么最好像您那样在初始化阶段读取它。这里,由你决定。这是双向的