powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / [ASP.NET MVC] Динамический роутинг
25 сообщений из 109, страница 1 из 5
[ASP.NET MVC] Динамический роутинг
    #38209634
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужна полная поддержка ЧПУ

mysite.ru/topic
mysite.ru/razdel/topic
mysite.ru/razdel/podrazdel/topic
mysite.ru/razdel/podrazdel/group/topic

Ссылки то и дело появляются новые, модерируются, переносятся, удаляются.., улавливается вот такой штукой

Код: c#
1.
2.
3.
4.
5.
routes.MapRoute(
  "Topics",
  "{*FriendlyUrl}",
   ...
 )



Но хочется странного. Чтобы при этом работал Default роутинг:

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



Выхода вижу два:

Прописать Default впереди и для controller прописать вручную констрейты для всех существующих Controller-классов, минус — нужно поддерживать актуальность вручную. Второй, это через рефлекшн вытаскивать все классы из неймспейса перед запуском и конструировать Default роутинг программно.

Есть ещё идеи? Может существуют более элегантные решения?
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38209661
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Третий способ: реврайтинг на лету по маске.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38209673
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

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

Проблемы с отбрасыванием .htm/.html нет, расширения для контента просто не используются.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210103
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ, Реврайтинг хорошо, но метод должен знать все контроллеры в лицо, чтобы не нареврайтить лишнего, или я что-то не так понял?
Реврайтингу не нужны контроллеры. Опиши в реврайте логику замены url, какая именно там у тебя логика - я без понятия.

hVosttПроблемы с отбрасыванием .htm/.html нет, расширения для контента просто не используются.
Это просто пример.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210304
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

с логикой, которая не требует знания контроллеров можно разобраться и в реврайтинге и в мапроутерах. да много где, хоть в фильтрах. проблема заключается в отделении ЧПУ от стандартной MVC маршрутизации. так как ЧПУ может быть абсолютно любым, никакая логика здесь не спасет и не поможет, нужно знать все контроллеры по именам, в лицо так сказать. вот я спросил про элегантный способ решения этой задачи. или я уж совсем непонятно объясняю задачу...
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210455
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, еще раз: реврайтингу сиренево на твои контроллеры и их лица. Мы смотрим в BeginRequest на Request.Path, анализируем его и меняем на нужный. Если ты в состоянии написать кейс для своей ситуации, значит хорошо.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210503
авторЕсть ещё идеи? Может существуют более элегантные решения?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
routes.MapRoute(
  "Topics",
  "topic",
   ...
 )
routes.MapRoute(
  "Razdel",
  "razdel/{*FriendlyUrl}",
   ...
 )
routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);


не проверял, так что сам подправь...
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210547
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эх... ))

всё не то.
вы товарищи, удивительно плоско мыслите.
в вашем мире может все и может начинаться на какой-то конкретный Razdel,
и скорее всего своим заказчикам вы навяжете свою систему, чтобы было проще кодить,
но поставлена задача, поддерживать универсальный ЧПУ, ссыль может начинать строиться с ~/{Razdel}/... где {Razdel} — что угодно, квинтиллионы варинатов.
допустим мы реврайтим все ЧПУ вот в такую ссылку: /Topic/{*FriendlyUrl} чтобы все ссылки обрабатывал один контроллер (Topic), но тогда зареврайтится и то, что не нужно, например /Catalog/ (он станет удивительно человечным /Topic/Catalog...), чтобы этого избежать поданобиться задавать констрейты. и вернемся к тому, с чего начали.

в MVC реврайтинг вообще не впился ни в одно место, у него есть свой мощный маршрутизатор, зачем его советовать не пойму??

похоже придётся ковырять RouteMagic

всем спасибо :)
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210576
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНо хочется странного. Чтобы при этом работал Default роутинг:

Я вот не пойму, если пропишут одинаковый, то приоритет будет у дефолтного?
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210596
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ны мы плоско мыслим, а ты линейно соображаешь :)
Десятый раз повторяю, "квинтиллионы варинатов" не нужно описывать реврайтингом, достаточно написать маску (регекс), примерно такую же, как в маршрутах, и отрабатывать её.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210605
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

Приоритет у того, кто идет первым. Наименование "Default" не играет роли.

В общем при конкретном количестве контроллеров и областей проблемы нет. Прописываем вперед вот такое:

Код: c#
1.
2.
3.
4.
5.
6.
			routes.MapRoute(
				name: "Default",
				url: "{controller}/{action}/{id}",
				constraints: new { controller = "Catalog|Account|Tags|Home" },
				defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
			);



И ловим 4 контроллера, если нет, срабатывают правила которые следуют ниже. Проблема в том, что вручную не хочется поддерживать констрейты. Как-то так. Лень двигатель прогресса и все такое ))
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210615
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

в упор не понимаю, что за волшебную маску ты имеешь в виду, которая отделит ЧПУ от обращения к контроллерам. если конечно все контроллеры запихать во что-то типа ~/Ahaha/{controller}/{action}/{id} ... и ловить этот урл по маске типа /Ahaha/.* — вообще шикарно. грубо и не профессионально. но обычно так и делают.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210619
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчто за волшебную маску ты имеешь в виду

МСУЕсли ты в состоянии написать кейс для своей ситуации, значит хорошо.

Думай. Я тебе написал, что возможен еще 3 вариант из перечисленных тобой двух - реврайтинг. Как реврайтить - смотри, играйся сам.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210663
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ ловим 4 контроллера, если нет, срабатывают правила которые следуют ниже.
И пользователь не получит ожидаемый результат по ссылке, или он должен знать констрейты?
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210730
автор...улавливается вот такой штукой
Код: c#
1.
2.
3.
4.
5.
routes.MapRoute(
  "Topics",
  "{*FriendlyUrl}",
   ...
 )


1. походу, одну траблу с таким роутом уже отгрёб ;)
2. +когда за этим роутом ты повторишь свою! систему обработки урлов (по сути уже! встроенную в FW), тогда и задумаешься насколько твоё решение было универсально-плоское...

ПыСы: всё это уже где то когда то было... ;)
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210851
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так...,

~/все-про-деревья/дубы/желуди/самое-древнее-дерево
~/привет/пять-приветов/тут-с-приветом
...

все это в базе хранится, и не может контролироваться на этапе разработки. есть ряд функциональных контроллеров и еще парочка специальных маршрутов, они перебивают любые ЧПУ, это by design

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

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

контроллеры с действиями должны быть в приоритете. не зависимо от ЧПУ. даже если попадется такой ЧПУ с адресом как у контроллера, должен сработать контроллер, а не ЧПУ. также можно что-то подмешивать в ссылочную базу контроллеров, чтобы работали какие-то волшебные регекспы. но это тоже грубо. хотя можно наверное и так.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210860
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

Пользователь всего-то и ходит по ссылкам )
ничего он не знает ни про констрейты, ни про контроллеры. по крайне мере, не должен
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210903
решение 1
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
routes.MapRoute(
				name: "Default",
				url: "{controller}/{action}/{id}",
				constraints: new { controller = "Catalog|Account|Tags|Home" },
				defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
			);
routes.MapRoute(
  "Topics",
  "{*FriendlyUrl}",
   ...
 )


===
Код: 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.
routes.MapRoute(
				name: "Home",
				url: "Home/{action}/{id}",				
				defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
			);
routes.MapRoute(
				name: "Account",
				url: "Account/{action}/{id}",				
				defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
			);
routes.MapRoute(
				name: "Tags",
				url: "Tags/{action}/{id}",				
				defaults: new { controller = "Tags", action = "Index", id = UrlParameter.Optional }
			);
routes.MapRoute(
				name: "Catalog",
				url: "Catalog/{action}/{id}",				
				defaults: new { controller = "Catalog", action = "Index", id = UrlParameter.Optional }
			);
routes.MapRoute(
  "Topics",
  "{*FriendlyUrl}",
   ...
 )


решение 2
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
routes.MapRoute(
  "Topics",
  "topic",
   ...
 )
routes.MapRoute(
  "Razdel",
  "razdel/{*FriendlyUrl}",
   ...
 )
routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);



выбирай!

как по мне так ты слегка запутался в стремлении к совершенству!
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210905
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt по крайне мере, не должен
Если не должен, то есть вероятность ввести ссылку зарезервированую под определенный контроллер.
По идее, вариант /Ahaha/.* тут был бы в тему.
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210935
автор... грубо и не профессионально .
тело уже зудит от этого словосочетания!
Код: c#
1.
2.
/razdel/~/все-про-деревья/дубы/желуди/самое-древнее-дерево
/razdel/~/привет/пять-приветов/тут-с-приветом


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

дальше работаешь с роутингом в соответствии с ген. указаниями MS!!!
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210974
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так...,

наверное вы правы, господа!
нет в этом мире совершенства )))
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210983
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

в постановке задачи принимали участие безумные сеошники )
понимаете что эт значит?
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210994
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38210997
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

Спасибо за ссылку, но....

Уважаемые пользователи!

Мы приносим свои извинения, но доступ к запрашиваемому ресурсу ограничен.

Возможные причины ограничения доступа:

Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в Единый Реестр доменных имен, указателей страниц сайтов сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено.

Проверить наличие сетевого адреса в Едином реестре можно в разделе «Просмотр реестра» на сайте www.zapret-info.gov.ru.

Доступ ограничен по решению суда или по иным основаниям, установленным законодательством Российской Федерации.

это уже даже не смешно (((
...
Рейтинг: 0 / 0
[ASP.NET MVC] Динамический роутинг
    #38211003
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня заходит)
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 1 из 5
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / [ASP.NET MVC] Динамический роутинг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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