2012-08-01 111 views
0

在我們的RouteConfig中,爲了讓公司配置文件名稱成爲我們的一些根URL,我們爲每個公司名稱添加一個路由,例如。 xyz.com/acme關於大量路由的建議

雖然這似乎工作正常,但我希望對此有一些一般建議,或者更好的解決方法。我特別關注績效,特別是在我們發展壯大的情況下,我們可能有10000多家公司,因此有10000多條路線。

的代碼看起來是這樣的:

foreach (string companyName in companyNameList) 
{ 
    routes.MapRoute(
     name: companyName, 
     url: companyName, 
     defaults: new { controller = "CompanyProfile", action = "Index" }); 
} 

任何意見,將不勝感激?

回答

3

你能不能有以下形式的單一路線:

 routes.MapRoute(
      name: "Default", 
      url: "{company}/{controller}/{action}/{id}", 
      defaults: new { controller = "CompanyProfile", action = "Index", id = UrlParameter.Optional }, 
      constraints: new { company= new CompanyConstraint(companyNames) }); 

CompanyConstraintIRouteConstraint,檢查,以確保該公司的名稱是有效的?事情是這樣的:

internal class CompanyConstraint: IRouteConstraint 
{ 
    public CompanyConstaint(IList<string> companies) 
    { 
     this.companies = companies; 
    } 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     object company; 
     if (!values.TryGetValue("company", out company) || company == null) 
     { 
      return false; 
     } 

     return companies.Contains(company.ToString()); 
    } 
} 

乾杯, 院長

+0

榮譽,謝謝 – 2012-08-03 06:37:26

+1

可能是最好的,以確保'的IList '是一個'HashSet的'讓'.Contains'運行儘可能快! – 2012-08-03 10:07:21