powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Маршрутизация в MVC Core
18 сообщений из 18, страница 1 из 1
Маршрутизация в MVC Core
    #39405179
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В стандартном приложении задан стандартный маршрут:
Код: c#
1.
2.
3.
4.
5.
6.
app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });



Как сделать, чтобы до перехода по маршруту попасть в свой класс, чтобы выполнить в нем какие-то предварительные действия, а потом отправить дальше по маршруту?
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405194
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405303
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Вам нужны фильтры на дейстие.
https://metanit.com/sharp/mvc/8.4.php
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405363
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeAntonariy,

Вам нужны фильтры на дейстие.
https://metanit.com/sharp/mvc/8.4.php Не, мне нужно Core, а это обычное MVC. hVostt дал нужную ссылку.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405425
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Да, точно, на Core не обратил внимание.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405884
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Создал middleware-сервис по образцу: https://metanit.com/sharp/aspnet5/2.20.php

А можно ли получить название контроллера и метода в контексте public async Task Invoke(HttpContext context) без парсинга адресной строки?
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39405894
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА можно ли получить название контроллера и метода в контексте public async Task Invoke(HttpContext context) без парсинга адресной строки?

Не, тогда тебе лучше делать фильтр, а не middleware:

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters

потому что до выполнения маршрутизации в Mvc, ничего ещё неизвестно.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39406591
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Сделал IActionFilter (да и сервис все равно пригодился), и не понял, как в нем прервать переход по маршруту и вернуть заданный controller/action или сразу view?

В примерах предлагается вернуть уже готовый контент:
Код: c#
1.
2.
3.
4.
        public void OnActionExecuting(ActionExecutingContext context)
        {
                context.Result = new ContentResult { Content = "Ресурс не найден" }; 
        }


Я пытался так:

Код: c#
1.
2.
var hc = new Controllers.HomeController();
context.Result = hc.About();

не вышло.

Можно вернуть что-нибудь в ContentResult и сделать context.HttpContext.Response.Redirect, но и без редиректа иногда хотелось бы возвращать не то, что запрошено.

И кстати в mid-сервисе хотелось бы уметь делать тоже самое.

Еще обнаружил, если ввести несуществующие controller/action, выдается пустая страница, до IActionFilter дело соответственно не доходит. В какой момент можно проверить, что маршрут сопоставлен, а если нет, то выдать указанный view?
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39406992
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСделал IActionFilter (да и сервис все равно пригодился), и не понял, как в нем прервать переход по маршруту и вернуть заданный controller/action или сразу view?

Нельзя. На момент выполнения IActionFilter, маршрут уже определён, это всего лишь обработка до и после выполнения определённого действия, заставить повторить жизненный цикл по другому маршруту можно только через полноценный редирект. Другой вью (на самом деле, другой результат) вернуть можно через свойство Result контекста фильтра.


AntonariyЯ пытался так:

Возможно, что-то отменяет фильтр. Проверь свойство Canceled в OnActionExecuted.

AntonariyИ кстати в mid-сервисе хотелось бы уметь делать тоже самое.

Cмотри раздел на этот счёт Using middleware in the filter pipeline в https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters

AntonariyЕще обнаружил, если ввести несуществующие controller/action, выдается пустая страница, до IActionFilter дело соответственно не доходит.

Естественно не доходит, фильтр действия работает только поверх существующего и определённого маршрутом действия :)


AntonariyВ какой момент можно проверить, что маршрут сопоставлен, а если нет, то выдать указанный view?

Общая информация здесь: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing

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

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

есть конечно и другие варианты, как накостылячить свой код :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Маршрутизация в MVC Core
    #39673833
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос по Core

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

во всех приложениях используется Windows-авторизация
по treeId лезем в БД, читаем необходимые для работы приложения группы AD
а по samAccountName в AD смотрим, входит ли в такие группы пользователь

как лучше построить маршрут и как потом его обрабатывать?

mySite\myApplication\TreeId\18\controller\action\id\123
или как-то так
mySite\myApplication\controller\action\id\123\TreeId\18

Желательно эту обработку сделать централизованно, чтобы не вешать на каждый метод
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39673893
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Код: c#
1.
2.
3.
                    routes.MapRoute(
                        name: "Tree",
                        template: "tree-{treeId:int}/{area:exists}/{controller}/{action}");



Ну и получайте все URL через маршрут Tree, указывать всегда treeId не нужно, если на контроллер пришёл по маршруту "Tree", в контексте будет уже это значение, которое будет сохраняться.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674441
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttandreymx,

Код: c#
1.
2.
3.
                    routes.MapRoute(
                        name: "Tree",
                        template: "tree-{treeId:int}/{area:exists}/{controller}/{action}");




Ну и получайте все URL через маршрут Tree, указывать всегда treeId не нужно, если на контроллер пришёл по маршруту "Tree", в контексте будет уже это значение, которое будет сохраняться.а c каким url-ом это будет работать?

щаз такой
http://localhost:2274/api/values/GetFiltersData
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674606
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нифига не выходит
есть ли где ссылочка по подходящий мне пример?

Код: c#
1.
2.
3.
4.
5.
6.
7.
            app.UseMvc(
                routes => {
                routes.MapRoute(
                    name: "Tree",
                    template: "tree-{treeId:int}/{area:exists}/{controller}/{action}");
                }
            );



старый маршрут обрабатывается ок
http://localhost:2274/api/values/GetFiltersData


новый как ни пробовал, всё 404 лезет
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674621
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так получается
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
namespace My.Controllers
{
    [Produces("application/json")]
    
    [Route("api/tree-{treeid:int}/[controller]")]
    [Route("api/[controller]")]
    public class ValuesController : Controller

***************

                if (RouteData.Values["treeid"] == null)
                    { TreeId = string.Empty; }
                else
                    { TreeId = RouteData.Values["treeid"].ToString(); }


работает как
http://localhost:2274/api/values/GetFiltersDataGet
так и
http://localhost:2274/api/tree-8/values/GetFiltersDataGet

но это не совсем то, что хотелось бы
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674726
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxно это не совсем то, что хотелось бы

Ну я показал для примера, а не конечное решение.

Расскажите ещё раз как хотелось бы.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674791
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За пример большое спасибо

Чего хочу
Сам получившийся урл меня устраивает
Нужен совет - как централізовано осуществить проверку на основании treeid и других параметров

А то я без опыта
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674795
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxесть параметр treeId, который должен быть обработан абсолютно во всех маршрутах
каким-то централизованным обработчикомпроверьте что ваши хотелки соответствуют REST.
...
Рейтинг: 0 / 0
Маршрутизация в MVC Core
    #39674799
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,
Тут образцы урл для rest
https://restfulapi.net/resource-naming/
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Маршрутизация в MVC Core
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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