Перегрузка toString () кажется немного неприглядной - который кажется чем-то вроде фрагмента toString () нормальная эксплуатация.
Что относительно:
public enum Errors {
DATABASE(1, "A database error has occured."),
DUPLICATE_USER(5007, "This user already exists.");
//... add more cases here ...
private final int id;
private final String message;
Errors(int id, String message) {
this.id = id;
this.message = message;
}
public int getId() { return id; }
public String getMessage() { return message; }
}
кажется намного более чистым мне... и менее подробным.
Мы используем:
public static string GetSubDomain()
{
string subDomain = String.Empty;
if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns)
{
subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
}
if (subDomain.Length == 0)
{
subDomain = "www";
}
return subDomain.Trim().ToLower();
}
Это не сильно отличается от RoR. Просто получите HTTP-запрос, возьмите значение хоста, разделите его (по каждой точке) и возьмите первую часть, чтобы получить субдомен.
string subdomain = requestContext.HttpContext.
Request.Headers["Host"].Split('.')[0];
Затем просто разрешите субдомен в учетной записи компании.
В блоге Маартена Баллиау описан один метод расширения RouteBase. Думаю, я также видел специальный обработчик маршрута, используемый для этого.
Кроме того, этот вопрос StackOverflow касался того же вопроса, но с использованием более упрощенного подхода.
Я определенно рекомендую исключить этот код. в сторону маршрутизации, а не встраивать логику для получения информации о домене в ваши контроллеры.