powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
25 сообщений из 228, страница 5 из 10
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626789
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущко,

Id int NOT NULL
Alias nvarchar(80)
ParentId int

накуя хранить весь FriendlyUrl?

чозабред вообще.

зачем в базе данных хранить ActionName, ControllerName?? какой-то студенческий высер.

Убей себя, неуч. Читай про MvcRouteHandler. В GetHttpHandler нужно в RequestContext определить контроллер и экшен.

Код: c#
1.
2.
3.
4.
5.
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
     new { controller = "Default", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new MyUrlRouteHandler();



Во-вторых, ты себе представляешь, какой у тебя будет фулскан таблицы по строке? На десятках и сотнях миллионах записей и выше у тебя там всё раком встанет. В-третьих, нахрена мне такой просад по перформансу? Чтобы удовлетворить эго упоротого сеошника? Да я ему лопату в жопу засуну, только не делать лишних запросов в БД!
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626790
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоА еще и память под сами роуты. Не стыдно за такой высер-то? ))

накуя что-то в памяти хранить кроме хеша от ссылки и айди ресурса?

ты точно правильно профиль выбрал? может того, дворы подметать? всяко лучше у тебя это получится.

Есть два варианта, память или БД. Если мапов немного, подойдет память (мой случай с топовым уровнем каталогов). Пойди подмойся уже, ламер.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626791
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоВ GetHttpHandler нужно в RequestContext определить контроллер и экшен.

да ради бога, но зачем в базе данных их хранить???

Код: c#
1.
2.
3.
4.
5.
6.
            var pathRoute = routes.MapRoute("Path", "{*path}",
                defaults: new { controller = "Entries", action = "Index", path = "index" },
                constraints: new { path = new EntryRouteConstraint() },
                namespaces: DefaultNamespaces);

            pathRoute.RouteHandler = new EntryRouteHandler();



мсущкоВо-вторых, ты себе представляешь, какой у тебя будет фулскан таблицы по строке?

какой фулскан по строке? считаешь хеш, находишь хеш. быстрее поиска хеша быть ничего не может. любая база данных обкакается найти и вернуть что-то быстрее поиска хеша в памяти.

мсущкоВ-третьих, нахрена мне такой просад по перформансу?

как раз наоборот. просада нет. быстрее ты просто не сделаешь. хоть расшибись об стенку.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626792
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а с чего майданутые сеошники решили, что для доступа к ресурсу обязательно знать способ навигации?

Иерархия не единственный способ стуктурирования
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626793
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоЕсли мапов немного, подойдет память (мой случай с топовым уровнем каталогов).

30-40 мб на каждый миллион адресов. память подойдёт в любом случае. если ты конечно не поисковик.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626797
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила с чего майданутые сеошники решили, что для доступа к ресурсу обязательно знать способ навигации?

я хз с чего они так решили.

ИзопропилИерархия не единственный способ стуктурирования

да ради бога.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626798
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоВ GetHttpHandler нужно в RequestContext определить контроллер и экшен.

да ради бога, но зачем в базе данных их хранить???

Код: c#
1.
2.
3.
4.
5.
6.
            var pathRoute = routes.MapRoute("Path", "{*path}",
                defaults: new { controller = "Entries", action = "Index", path = "index" },
                constraints: new { path = new EntryRouteConstraint() },
                namespaces: DefaultNamespaces);

            pathRoute.RouteHandler = new EntryRouteHandler();



Как зачем? У нас 100500 урлов, 100500 контроллеров и 100500 экшенов. Включи остатки мозгов уже, не позорься с тупыми вопросами.

hVosttмсущкоВо-вторых, ты себе представляешь, какой у тебя будет фулскан таблицы по строке?

какой фулскан по строке? считаешь хеш, находишь хеш. быстрее поиска хеша быть ничего не может. любая база данных обкакается найти и вернуть что-то быстрее поиска хеша в памяти.
Мда, твои познания СУБД оставляют желать лучшего... Ты понимаешь, что такое "считаешь хеш, находишь хеш" на низком уровне? :)

hVosttмсущкоВ-третьих, нахрена мне такой просад по перформансу?
как раз наоборот. просада нет. быстрее ты просто не сделаешь. хоть расшибись об стенку.
Дополнительный запрос в БД, дополнительное хранение SEO говна, дополнительный вызов и анализ - никакого просада перформанса? Ты дурак?
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626801
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоЕсли мапов немного, подойдет память (мой случай с топовым уровнем каталогов).
30-40 мб на каждый миллион адресов. память подойдёт в любом случае. если ты конечно не поисковик.
Какие 30 мб, ты упал? Я тебе еще раз говорю, нужен контроллер и экшен для маппинга. Во-вторых, десятки и сотни миллионов строк, это гигабайты и гигабайты данных для связывания. Доп. запросы у тебя будут выполняться по часу и лупить фулсканом, индекс по хешу будет отжирать половину жетской памяти сервера, всё это будет нереально тормозить и еле прожевываться. У нас более миллиард позиций товаров, чеков и детализаций - по твоей "архитектуре" у нас всё раком встанет. Школьник, иди тренируйся на лягушках лучше.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626803
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttИзопропила с чего майданутые сеошники решили, что для доступа к ресурсу обязательно знать способ навигации?
я хз с чего они так решили.
То есть ты не в курсе, почему они так решили, но упорото продолжаешь нести их знамя и вещать миру о праведном URL строении? Зачёт, чё
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626804
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоКак зачем? У нас 100500 урлов, 100500 контроллеров и 100500 экшенов. Включи остатки мозгов уже, не позорься с тупыми вопросами.

ЗАЧЕМ?!?????? тебе столько контроллеров???????
понятия контроллер/экшен есть на уровне реализации, в базе их быть не должно.
за каким хреном их туда пихать?

мсущкоТы понимаешь, что такое "считаешь хеш, находишь хеш" на низком уровне? :)

а у тебя с этим проблемы? говори, что хотел сказать.


мсущкоДополнительный запрос в БД, дополнительное хранение SEO говна, дополнительный вызов и анализ - никакого просада перформанса? Ты дурак?

при чем тут SEO? речь идёт об сопоставлении URL ресурсу, и как следствие обработчику. про какой просад перфоманса ты говоришь?

приходит запрос. ищем хеш URL в таблице, находим его, получаем ID ресурса, отправляем обработку запроса в контроллер, который выцепляет ресурс по ID. пользователь ни про каеие ID не знает.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626806
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоЯ тебе еще раз говорю, нужен контроллер и экшен для маппинга.

аааа... зачем??? для маппинга? )))))))))


мсущкоВо-вторых, десятки и сотни миллионов строк, это гигабайты и гигабайты данных для связывания.

я не понял что ты там связываешь.


мсущко. Доп. запросы у тебя будут выполняться по часу и лупить фулсканом, индекс по хешу будет отжирать половину жетской памяти сервера, всё это будет нереально тормозить и еле прожевываться.

какие доп. запросы? запросы чего? зачем?


мсущкоУ нас более миллиард позиций товаров, чеков и детализаций - по твоей "архитектуре" у нас всё раком встанет.

при чём тут твои чеки? позиции товара -- да. раком-то с чего встанет? укажи на конкретную причину.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626808
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоТо есть ты не в курсе, почему они так решили, но упорото продолжаешь нести их знамя и вещать миру о праведном URL строении? Зачёт, чё

вот ты даже наехать толково не можешь. какое знамя? я тебе дал два авторитетных источника по поводу URL. и уж они всяко аторитетней твоих слов. не? можешь что-нибудь в противовес привести. например, какое-нибудь высказывание Тима, который призывает генерить URL как попало, лишь бы работало. давай.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626811
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttпри чем тут SEO? речь идёт об сопоставлении URL ресурсу
то есть один ресурс, имеющий несколько URL одновременно - это нормально?
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626812
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилто есть один ресурс, имеющий несколько URL одновременно - это нормально?

нет, абсолютно не нормально.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626813
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttЗАЧЕМ?!?????? тебе столько контроллеров???????
понятия контроллер/экшен есть на уровне реализации, в базе их быть не должно.
за каким хреном их туда пихать?
Хватит прикидывать дураком. У меня есть n контроллеров и n * m экшенов. Все мои "красивые адреса" должны вязаться к ним. Не тупи.

hVosttмсущкоТы понимаешь, что такое "считаешь хеш, находишь хеш" на низком уровне? :)
а у тебя с этим проблемы? говори, что хотел сказать.
У меня как-раз проблем нет. Начни читать отсюда http://technet.microsoft.com/ru-ru/library/ms187348.aspx

hVosttмсущкоДополнительный запрос в БД, дополнительное хранение SEO говна, дополнительный вызов и анализ - никакого просада перформанса? Ты дурак?
при чем тут SEO? речь идёт об сопоставлении URL ресурсу, и как следствие обработчику. про какой просад перфоманса ты говоришь?
Убей себя. Твоя тупость неистребима.

hVosttприходит запрос. ищем хеш URL в таблице, находим его, получаем ID ресурса, отправляем обработку запроса в контроллер, который выцепляет ресурс по ID. пользователь ни про каеие ID не знает.
Чтобы "найти" хеш, тебе потребуется много времени. Ты понимаешь, что такое "найти запись строкового типа" в таблице из десятков и сотней миллионов записей? Ты, вообще, работал с базами, строки которых превышают количество строк Northwind?
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626815
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоТо есть ты не в курсе, почему они так решили, но упорото продолжаешь нести их знамя и вещать миру о праведном URL строении? Зачёт, чё

вот ты даже наехать толково не можешь. какое знамя? я тебе дал два авторитетных источника по поводу URL. и уж они всяко аторитетней твоих слов. не? можешь что-нибудь в противовес привести. например, какое-нибудь высказывание Тима, который призывает генерить URL как попало, лишь бы работало. давай.

Ты повторяешься. Я уже дал аргументы по этому поводу.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626819
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttИзопропилто есть один ресурс, имеющий несколько URL одновременно - это нормально?
нет, абсолютно не нормально.
Ну ты клоун...

http://www.microsoft.com/ru-ru
http://www.microsoft.com/ru-ru/default.aspx
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626821
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ужасна ли эта ссылка, праведный ты наш?

http://www.microsoft.com/ru-ru/search/DownloadResults.aspx?FORM=DLC&ftapplicableproducts=^"Developer Tools"&sortby= weight

:)

P.S. Кончай надрачивать на урлы, серьезно
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626822
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоХватит прикидывать дураком. У меня есть n контроллеров и n * m экшенов. Все мои "красивые адреса" должны вязаться к ним. Не тупи.

ну и вяжи их на уровне привязки Хеш(URL) + ID ресурса + Код обработчика. код обработчика (int) раскрывается в Контроллер/Экшен, а последнему известно что это за ID ресурса и что с ним делать. дополнительные параметры могут быть представлены в URL обычным образом, если они требуются.

мсущкоТы понимаешь, что такое "найти запись строкового типа" в таблице из десятков и сотней миллионов записей? Ты, вообще, работал с базами, строки которых превышают количество строк Northwind?

нафига мне искать запись строкового типа в таблице из десятков записей? зачем я это буду делать?

1. приходит запрос с URL.
2. поиск в RouteCollection
3. запуск универсального хендлера ({*path})
4. вычисляем хеш от {*path}
5. ищем хеш в таблице
6. находим объект
7. исходя из типа ресурса, указанного в объекте передаём обработку нужному контроллеру и экшену, передав код ресурса.
8. экшен вытаскивает по коду нужный ресурс из БД, готовит вью модель, запускает вью

в чём проблема?
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626824
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоНу ты клоун...

http://www.microsoft.com/ru-ru
http://www.microsoft.com/ru-ru/default.aspx

повторяю, это абсолютно не нормально.

савсем глюпий, да? дороги тоже должны быть ровными.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626825
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоУжасна ли эта ссылка, праведный ты наш?

http://www.microsoft.com/ru-ru/search/DownloadResults.aspx?FORM=DLC&ftapplicableproducts=^"Developer Tools"&sortby= weight

:)

P.S. Кончай надрачивать на урлы, серьезно

кончай тупить. это не ссылка на ресурс.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626827
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttищем хеш в таблице

чтоб у тебя не возникало разночтений. в таблице в памяти.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626841
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
1. приходит запрос с URL.
2. поиск в RouteCollection
3. запуск универсального хендлера ({*path})
4. вычисляем хеш от {*path}
5. ищем хеш в таблице
6. находим объект
7. исходя из типа ресурса, указанного в объекте передаём обработку нужному контроллеру и экшену, передав код ресурса.
8. экшен вытаскивает по коду нужный ресурс из БД, готовит вью модель, запускает вью

в чём проблема?

Вообщем, давай поступим проще. Я тебе дам код своей логики, ты дашь код своей логики. Мне надоело инопланетянину доказывать, что он упорот.

Вот мой вариант (3 пункт): http://codearticles.ru/articles/2241

Жду твой вариант.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626857
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущко,

в упрощённом виде:

роутинг (должен быть в конце):

Код: c#
1.
2.
3.
4.
5.
6.
            var pathRoute = routes.MapRoute("Path", "{*path}",
                defaults: new { controller = "Home", action = "Default", path = "index" },
                constraints: new { path = new EntryRouteConstraint() },
                namespaces: DefaultNamespaces);

            pathRoute.RouteHandler = new EntryRouteHandler();



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public class EntryRouteConstraint : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
                          RouteDirection routeDirection)
        {
            if (routeDirection == RouteDirection.UrlGeneration)
            {
                return true;
            }
            var path = values[parameterName] as string;
            if (path == null)
                return false;
            var resolved = EntryManager.Current.Resolve(path);
            if (resolved == null)
                return false;
            httpContext.Items["EntryMap"] = resolved;
            return true;
        }
    }



хендлер (срабатывает, если ресурс найден):

Код: 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.
    public class EntryRouteHandler : MvcRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            var entryData = requestContext.HttpContext.Items["EntryMap"] as EntryData;
            var routeData = requestContext.RouteData;
            // разруливаем обработчик (контроллер/экшен)
            ResolveRouteData(entryData, routeData);
            // сохраняем ID (можно и в RouteData.Values, но лучше не надо)
            routeData.DataTokens["entryId"] = current.Id;
            return base.GetHttpHandler(requestContext);
        }

        private static void ResolveRouteData(EntryData entryDate, RouteData routeData)
        {
           switch(entryData.ResourceType)
           {
               case ResourceTypes.Redirect:
                  routeData.Values["controller"] = "Entries";
                  routeData.Values["action"] = "Redirect";
                  break;                  
               case ResourceTypes.Article:
                  routeData.Values["controller"] = "Articles";
                  routeData.Values["action"] = "Details";
                  break;
               ...                 
           }
        }
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    public class EntryManager : IEntryManager
    {
       ...
       public EntryData Resolve(string path)
       {
          using(var sha1 = SHA1.Create())
          {
             // считаем хеш
             var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(path.ToLower());
             // ключ хеша
             var hashKey = new Guid(hash);
             EntryData entryData;
             // ищем ресурс в таблице (упрощённо)
             if(_entryTable.TryGetValue(hashKey, out entryData))
               return entryData;
             // ресурс не найден
             return null;
          }
       }
       ...
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    public ArticlesController : Controller
    {
        public ArticlesController(Lazy<IArticleService> service)
        {
            _service = service;
        }
        
        private IArticleService Service { get { return _service.Value; } }

        ...
        public ActionResult Details()
        {
           // достаём значение ID ресурса (можно и лучше это сделать в аспекте)
           var entryId = (int)ControllerContext.RouteData.DataTokens["entryId"];
           // получаем ресурс
           var article = Service.GetArticle(entryId);
           ... 
        }
        ...
    }



Код: c#
1.
2.
3.
4.
5.
6.
    // минимум информации о ресурсе -- тип и ID, можно оформить в виде struct для экономии
    public class EntryData
    {
       public int Id { get; set; }
       public ResourceTypes ResourceType { get; set; }
    }



точек расширения в данной схеме предостаточно.
...
Рейтинг: 0 / 0
как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
    #38626923
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, какой-то ацкий гавнокод. Во-первых, ты жестко прибиваешь контроллеры с экшенами - это не есть хорошо. Во-вторых, накой тут танцы с хешем? Путь может быть (и должен быть) тем же ключом для резолва. Ну и в третьих, чем это принципиально отличается от моей схемы? Не считая того, что у тебя всё гвоздями прибито, а у меня 100% динамика, т.к. гибко спроектировано хранилище и не используется оперативный своп в целях повышения производительности. Основной просад по перформансу - это лишний запрос в БД, как я и писал раньше. Годится для лапидарных сайтиков типа моего, не более. И то я не стал юзать это гумно, т.к. я срал на пришибленных сеошников.
...
Рейтинг: 0 / 0
25 сообщений из 228, страница 5 из 10
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / как сделать ...fold1/default.aspx?id=7 заменить на ...fold1/?id=7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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