powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC Получить город из URL и вывести информацию по городу
1 сообщений из 1, страница 1 из 1
MVC Получить город из URL и вывести информацию по городу
    #38517182
XFireWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите, пожалуйста, как правильно реализовать.
Есть сайт, есть города. Ссылки на сайт tomsk.site.ru, novosibirsk.site.ru и т.п. Сайт ессно один.
Необходимо получить город из URL и вывести информацию в зависимости от города.
Ранее организовал так
Конструктор
Код: c#
1.
2.
3.
4.
5.
6.
private readonly Helper _hl;
      public CategoryController(IDataManager dataManager)
        {
            _dataManager = dataManager.GetDataManager();
            _hl = new Helper(_dataManager);
        }


Метод
Код: c#
1.
2.
3.
4.
5.
6.
7.
public ActionResult Index()
        {
            var townItem = _hl.GetTownItem(HttpContext.Request);

            ViewBag.TownId = townItem.Name;
           return View();
        }



Сам метод хелпера
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public Towns GetTownItem(HttpRequestBase request)
        {
            var url = request.Headers["HOST"];
            var split = url.Split('.');
            var index = 0;
            if (split[0].ToLower() == "www")
                index = 1;
            return _dataManager.Towns.GetTown(split[index]) ?? _dataManager.Towns.GetTown(_defaultTownLink);
        }



Но все это как-то некрасиво, что ли и чую что неправильно. Вызывать это все для каждого контроллера или метода, много повторяющегося кода.

Хочется реализовать через отдельный модуль HttpModule
Как говорится сначала сделал, потом подумал.
Реализовал модуль так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
class Town : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
        }

        void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            var app = (HttpApplication)sender;
            var request = app.Context.Request;

            TownInfo.TownFromUrl = request.Url.Host;
        }

        public void Dispose()
        {
        }
    }
    public static class TownInfo
    {
        private static string _host;

        public static string TownFromUrl
        {
            set
            {
                if (string.IsNullOrWhiteSpace(_host))
                    _host = value.ToLower();
            }
        }

        public static TownModel Town
        {
            get
            {
                var split = _host.Split('.');
                byte index = 0;
                if (split[0] == "www")
                    index = 1;

                return GetTown(split[index]);
            }
        }
        /// <summary>
        /// Возвращает информацию по городу
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        static TownModel GetTown(string name)
        {
            var listTowns = new List<TownModel>
            {
                new TownModel {Id = 0, Name = "Томск", Link = " tomsk",Address = "адрес томска",CodePhone = "3822",Phone = "тел Томска",Email = "мыло Тск"},
                new TownModel {Id = 2, Name = "Новосибирск", Link = "novosibirsk",Address = "адрес Нск",CodePhone = "383",Phone = "тел Нск",Email = " мыло Нск"}
            };
            var item = listTowns.SingleOrDefault(x => x.Link.Equals(name));
            return item ?? listTowns.SingleOrDefault(x => x.Id == 0);
        } 
    }



Использую так
Код: c#
1.
2.
3.
4.
5.
6.
public ActionResult Index()
        {

            ViewBag.Town = HelperGlobal.TownInfo.Town.Name;
            return View();
        }



Да все возвращает, но класс то static и это плохо, т.к. есть вероятность прочитать совсем не тот город что в УРЛе, например следующий запрос изменит город и инфу по нему.


Подскажите пожалуйста bestpractic по данному решению. Может я совсем не в том направлении двигаюсь.

Спасибо за ответы.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC Получить город из URL и вывести информацию по городу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]