Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
1

Дружественный URL для пользователя в адресной строке браузера

18.02.2018, 15:16. Показов 2142. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здравствуйте!

Возникла проблема при реализации дружественного URL для пользователя в адресной строке браузера. Перерыл много чего в Интернете - мало толку. Теперь надеюсь на вашу помощь!

Постараюсь объяснить то, что хочется реализовать.

Пусть на главной странице сайта (путь - SITE/) есть ссылка на разделы по пути SITE/Sections/. В разделах есть список этих разделов, а также есть возможность добавлять, редактировать и удалять разделы, находясь по данному пути в адресной строке браузера. В каждый из этих разделов можно войти по пути SITE/Sections/НазваниеРаздела, где так же можно добавлять, редактировать и удалять элементы, т.е. путь до элемента - SITE/Sections/НазваниеРаздела/НазваниеЭлемента

Вопрос: как такое реализовать, если такое, конечно, возможно в MVC? Генерировать дружественное название раздел или элемента я могу. Маршруты мне здесь не помогли, ибо, к примеру, получив ссылку SITE/Sections/Create, я должен сделать метод Create в контроллере SectionsController, а получив ссылку SITE/Sections/НазваниеРаздела, я должен перейти, наверное, в метод Details в этом же контроллере, где вывожу список элементов.

Я слаб в бекэнд - признаю! Может, такое вообще нельзя сделать.

Заранее спасибо за адекватные ответы!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2018, 15:16
Ответы с готовыми решениями:

Как изменить URL в адресной строке браузера
Привет всем! Помогите с решением: Как изменить URL в адресной строке браузера? На пример Opera....

Получить URL из адресной строки браузера
Всем здрасте. Можно ли как либо узнать что написано в поле "Адрес" в браузере.

S.coldsearch.com в адресной строке браузера
ввожу любой адрес, кидает сначала на coldsearch а потом уже на нужный сайт.в настройках стоит от...

Неправильный ввод в адресной строке браузера
У меня есть пункт меню который ссылается на страницу http://site.ru/videolessons/1.php?page=1...

11
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
18.02.2018, 15:40 2
https://docs.microsoft.com/en-... rs/routing
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
20.02.2018, 20:04  [ТС] 3
Цитата Сообщение от sau Посмотреть сообщение
Спасибо за ссылку, конечно же, но мне нужна не такая помощь. Я не знаю, как организовать всё в проекте.

Попробую ещё раз объяснить на другом примере.

Пусть на главной странице сайта есть раздел "Языки", который уже есть при развертывании сайта. Путь к этому разделу - <Название Сайта>/Languages/ .

В этом разделе есть список языков: например, "Английский" и "Немецкий". В этот список можно добавлять новые языки, так и редактировать или удалять старые. Допустим, мы вошли в язык "Английский". Путь к этому языку - <Название Сайта>/Languages/English/ .

Внутри языка есть темы: к примеру, "Грамматика" и "Аудирование". Эти темы так же можно создавать, редактировать или удалять. Допустим, войдём в "Грамматика". Путь к теме - <Название Сайта>/Languages/English/Gramma/ .

В теме есть список уроков: "Урок 1", "Урок 2" и т.д. Так же можно манипулировать уроками. Зайдём в первый урок - и путь будет <Название Сайта>/Languages/English/Gramma/Lesson1 .

Вопрос: КОНКРЕТНО, как такое лучше организовать в MVC/Core? При создании какой-то части я могу генерировать SLUG. Причём SLUG могут совпадать у некоторых элементов ("Урок 1" => 1). Может, надо для каждого элемента хранить его полный путь, который собрать при создании элемента? Но тогда как заставить, имея полный адрес, заставить выполнить нужное действие (видимо, какой-нибудь метод "Details" для конкретного элемента)?

Сложно!
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
20.02.2018, 22:46 4
Ну так по ссылке выше все отлчно обьясняеться как реализовать то что вам нужно.

C#
1
2
3
4
5
[HttpGet("/languages/{language}/{category}/{lesson}")]
public IActionResult ViewLesson(string language, string category, string lesson)
{
    ...
}
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
20.02.2018, 23:21  [ТС] 5
Цитата Сообщение от lvlkoo Посмотреть сообщение
Ну так по ссылке выше все отлчно обьясняеться как реализовать то что вам нужно.

C#
1
2
3
4
5
[HttpGet("/languages/{language}/{category}/{lesson}")]
public IActionResult ViewLesson(string language, string category, string lesson)
{
    ...
}
Хорошо. Спасибо за ответ. Вроде, понял, что, в итоге, нужен один контроллер для, по примеру, Languages, а уже в нём до чёрта методов действий для разных данных. И ещё, наверное, понял, что создание разных элементов надо засовывать в один контроллер, даже в Home. До этого хотел лепить к каждому элементу контроллер - и поэтому не мог понять, как организовать всё. Думаю, сейчас стало яснее. Но узнаю я об этом, когда что-то реализую. Ещё раз спасибо за прозрение!
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
25.02.2018, 19:58  [ТС] 6
Цитата Сообщение от lvlkoo Посмотреть сообщение
Ну так по ссылке выше все отлчно обьясняеться как реализовать то что вам нужно.

C#
1
2
3
4
5
[HttpGet("/languages/{language}/{category}/{lesson}")]
public IActionResult ViewLesson(string language, string category, string lesson)
{
    ...
}
Осталась ещё одна непонятка: как по-человечески сгенерировать ссылку на этот метод? Максимум, что у меня работает, - собирать URL строкой: href = "/part1" + "/part2" + ... , но это, кажется, дико. Уверен, есть другой рабочий способ, но для меня пока есть только один...
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
25.02.2018, 20:21 7
Цитата Сообщение от oBOXPOH Посмотреть сообщение
как по-человечески сгенерировать ссылку на этот метод
C#
1
Url.Action("ActionName", "ControllerName")
https://msdn.microsoft.com/ru-... 18%29.aspx
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
25.02.2018, 20:54  [ТС] 8
Цитата Сообщение от lvlkoo Посмотреть сообщение
C#
1
Url.Action("ActionName", "ControllerName")
https://msdn.microsoft.com/ru-... 18%29.aspx
Эм... может, конечно, я не понимаю что-то, но если у нас контроллер с именем, например, languages и метод действия тот, который был выше, т.е.:

C#
1
2
3
4
5
[HttpGet("/languages/{language}/{category}/{lesson}")]
public IActionResult ViewLesson(string language, string category, string lesson)
{
    ...
}
то при таком создании ссылки <a href="@Url.Action("ViewLesson", "Example")">Ссылка</a> путь будет, если я не ошибаюсь, к /languages/ViewLesson/, где ничего нет, но мне же надо сгенерировать /languages/{language}/{category}/{lesson}.
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
25.02.2018, 21:45 9
oBOXPOH, ну посмотрите же ссылку которую я дал! Там есть другая перегрузка метода, которая принимает параметры

C#
1
Url.Action("ActionName", "ControllerName", new {strParam1 = "someValue", intParam2 = 0})
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
25.02.2018, 22:58  [ТС] 10
Цитата Сообщение от lvlkoo Посмотреть сообщение
oBOXPOH, ну посмотрите же ссылку которую я дал! Там есть другая перегрузка метода, которая принимает параметры

C#
1
Url.Action("ActionName", "ControllerName", new {strParam1 = "someValue", intParam2 = 0})
Извините, что кажусь тупым.

На самом деле, я, конечно, уже пробовал и такое: в вашем случае создастся ссылка /ControllerName/ActionName?strParam1=someValue&intParam2=0, но никак не /ControllerName/ActionName/someValue/0. Я пробовал сделать отдельный маршрут для такого шаблона с определённым названием контроллера, но к успешному результату не пришёл.
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
26.02.2018, 17:07 11
Цитата Сообщение от oBOXPOH Посмотреть сообщение
в вашем случае создастся ссылка /ControllerName/ActionName?strParam1=someValue&intParam2=0, но никак не /ControllerName/ActionName/someValue/0.
С чего это вдруг?

Если route будет /ControllerName/ActionName/{strParam1}/{intParam2}

И в методе будут параметры
C#
1
public ActionResult ActionName(string strParam1, int intParam2)
то всё будет чётко!
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 7
26.02.2018, 21:25  [ТС] 12
Цитата Сообщение от LeniumSoft Посмотреть сообщение
С чего это вдруг?

Если route будет /ControllerName/ActionName/{strParam1}/{intParam2}

И в методе будут параметры
C#
1
public ActionResult ActionName(string strParam1, int intParam2)
то всё будет чётко!
Работает! Большое спасибо! Приятно осознавать, что всё ещё есть пока люди, готовые помочь и разобраться!

Правда... возникла новая проблема: при переходе по генерируемому пути все остальные ссылки "ломаются", т.е. для них неправильно генерируются ссылки. Думаю, это из-за созданного маршрута. Покажу основные куски кода программы:

Добавление нового маршрута в MVC:
C#
1
2
3
4
5
6
7
8
9
10
app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "section",
                    template: "Action/ViewSection/{fstLevelSection}");
 
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
Контроллер Action и его метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ActionController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
 
        [HttpGet("Sections/{fstLevelSection}")]
        public async Task<IActionResult> ViewSection(string fstLevelSection)
        {
            ...
        }
    }

Генерация ссылки:
C#
1
<a asp-controller="Action" asp-action="ViewSection" asp-route-fstLevelSection="SLUG">Ссылка</a>
При переходе по ней я действительно попадаю на /Sections/SLUG. Но проблема в том, что у меня есть ещё контроллер с именем Sections - и теперь, обращаясь к <a asp-controller="Sections" asp-action="Index">Разделы</a> в пути /Sections/SLUG, ссылка генерируется неверно, а именно /Action/ViewSection/SLUG?action=Index&controller=Sections, хотя с главной страницы ссылка <a asp-controller="Sections" asp-action="Index">Разделы</a> генерируется ещё правильно. Короче, маршрутом я испортил остальное.

Но решить эту проблему, кажется, легко: переименовать либо контроллер Sections, либо статическое имя /Sections. Хотя хочется одного и того же имени...
0
26.02.2018, 21:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 21:25
Помогаю со студенческими работами здесь

Замена ссылок в адресной строке браузера
Привет всем. Такой вопрос: предроложим страница &quot;контакты&quot; выводится в адрессной страке как...

кодировка кирилличиских букв в адресной строке браузера
Точнее кодировка того что приходит в скрипт через GET. Походу строка однобайтная. А проект у меня...

Как изменить адрес в адресной строке браузера?
На странице два фрейма, в левом фрейме находиться меню, а в правом список товаров. По списку...

Иконка сайта в адресной строке браузера - не выводится
Здравствуйте, у меня такая проблема: не выводится иконка сайта в адресной строке браузера. Я долго...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru