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" });
}

任何建议将不胜感激?

4

1 回答 1

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) });

在哪里CompanyConstraint进行IRouteConstraint检查以确保公司名称有效?像这样的东西:

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());
    }
}

干杯,院长

于 2012-08-01T13:26:53.567 回答