这是否适合MVC路由的“最佳实践”?

时间:2015-11-26 20:34:00

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 asp.net-mvc-routing

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

http://www.blah.com/client1/ .....

并且Client2显示如下:

http://www.blah.com/client2/

等等。所以我将路由表设置为:

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

这是第一个问题。到目前为止,有没有人看到我如何设置路由表有什么问题?如果有人指定公司名称“ClientX”,我想确保第一条路线被执行,否则如果它们只指定一个控制器/动作,那么我希望第二条路线被执行。

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

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

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

        base.Initialize(requestContext);
        }

“CompanyName”是一个属性:

public string CompanyName { get; private set; }

我以前从未搞过MVC中的默认路由(我从来没有需要),我想确保我没有做一些愚蠢的事情。

1 个答案:

答案 0 :(得分:0)

路由表没问题,这通常是在MVC领域和Web API中完成的。一切都很好。

然而,在控制器中初始化公司,它并不坏,只是通常你会在action方法中添加一个名为company of string的action参数。如果控制器中的所有或许多操作都需要这些信息,那么最好像初始化阶段一样在初始化阶段读取它。在这里,这取决于你。它有两种方式。