У меня есть сайт ASP.net MVC (5.2), который работает с использованием нескольких поддоменов, где имя поддомена - это имя клиента в моей базе данных. В основном то, что я хочу сделать, это использовать субдомен в качестве переменной в моих методах действий, чтобы я мог получить правильные данные из моей базы данных.Использование субдомена в качестве параметра
Я сделал что-то подобное несколько лет назад, но это грязно и неинтуитивно, поэтому было интересно, есть ли лучший способ сделать это, чем я использовал раньше. Вот что я делал раньше:
protected override void OnActionExecuting(ActionExecutingContext filterContext) {
Session["subdomain"] = GetSubDomain(Request.Url);
}
private static string GetSubDomain(Uri url) {
string host = url.Host;
if (host.Split('.').Length > 1) {
int index = host.IndexOf(".");
string subdomain = host.Substring(0, index);
if (subdomain != "www") {
return subdomain;
}
}
return null;
}
Которые в основном присваивается ключ к переменной сеанса, если поддомен было ничего, кроме «WWW», но я действительно не доволен этим способом сделать это, поскольку это зависит от мне известно, что сессия может содержать это волшебное значение!
В идеале я хотел бы создать атрибут, который я могу украсить своими классами/методами, чтобы извлечь субдомен, а затем разрешить включать параметр «поддомен» в мой метод действий, который будет содержать значение извлекается атрибутом. Возможно ли это?
Если это невозможно, есть ли лучший способ сделать то, что я сейчас делаю, не полагаясь на сеанс?
Спасибо,
Дилан
Конечно, клиент будет необходимо войти в систему? Разве это не было бы легче загрузить в названии в этот момент? – James
Я сразу понял, что могу создать приватную переменную в контроллере, а метод OnACtionExecuting записывает это вместо сеанса, но это все равно означает необходимость включать логику на каждую страницу, так что я все еще нахожусь после более чистый способ сделать это, что не заставляет меня повторять код. –
Я думаю, что 'Session' является правильным местом для сохранения значения, однако, я думаю, что ваша идея вытащить его из URL * за запрос * неверна. Как я уже сказал, клиент должен войти в систему в какой-то точке, поэтому * должен быть ассоциацией с клиентом и именем - после успешного входа я просто установил бы имя в 'Session'. – James