Как динамически направить запрос к определенному контроллеру и действие с исходными путями запроса в качестве параметров - PullRequest
0 голосов
/ 31 октября 2019

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

Я хотел бы принять запрос типа:

example.com/anything1/anything2

и отправить его по адресу:

example.com/Home/Display?var1=anything1&var2=anything2

Браузер должен отображать исходный запрос, а не изменять.

Моя конечная цель - вернуть homeмакет контроллера с view получением данных из базы данных.

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

pattern: "{custompath}/{custompage}");

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(
        name: "notDefault",
        pattern: "{area:exists}/{controller=Content}/{action=Index}/{id?}");
});

Это текущая настройка по умолчанию, которая работает с моими областями и контроллерами, но я не до конца понимаю, почему.

Последнее обновление В статье о миграции с ядра 2.2 на 3 asp.net говорится, что«Маршрутизация конечной точки поддерживает тот же синтаксис шаблона маршрута и функции создания шаблона маршрута, что и IRouter». https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#mvc-service-registration

Нет ссылок на ожидаемый синтаксис, но я нашел несколько старых статей, в которых есть информация. Будучи полезными, они все еще неполны и / или неточны. При применении логики я обнаружил ошибки. Это было наиболее информативно. https://aspnetcore.readthedocs.io/en/stable/fundamentals/routing.html

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

При запросе https://localhost:port

endpoints.MapControllerRoute(
    name: "account",
    pattern: "Account/{controller=Dashboard}/{action=Overview}",
    defaults: new { area = "Account" });
endpoints.MapControllerRoute(
    name: "manage",
    pattern: "Manage/{controller=Content}/{action=Index}",
    defaults: new { area = "Manage" });
endpoints.MapControllerRoute(
    name: "default",
    pattern: "",
    defaults: new { controller = "Content", action = "Display", path = "Public", page = "Index" });

он обрабатывает запрос на https://localhost:port/Account/Content/ и с содержимым от https://localhost:port/Content/Display/

Я ожидал, что, когда я не введу «Учетная запись» или «Управление», он провалится на пустой маршрут и остановится там. Но кажется, что после того, как он туда добирается, он делает что-то ещеПоловина того, что я хочу, достигнута, лол.

1 Ответ

0 голосов
/ 31 октября 2019

Я не думаю, что существует документ для синтаксиса или формата шаблона, но я смог получить что-то работающее.

С помощью приведенного ниже кода я смог отправить запрос вроде:

example.com/anything1/anything2

и он был перенаправлен в контроллер «Домой», действие «Отображение» с чем-нибудь1 и чем-либо2, отправленным в качестве аргументов. И пользователь по-прежнему видит исходный запрос.

app.UseEndpoints(endpoints =>
{
     endpoints.MapControllerRoute(
           name: "default",
           pattern: "{path}/{page}",
           defaults: new {controller="Home", action="Display", path="", page="" }); 
});

Кроме того, добавление текста в кавычки пути и страницы позволит отправлять значения по умолчанию, если ничего не запрашивается. Первоначально я написал промежуточное программное обеспечение для обработки всего ответа, но мне пришлось генерировать бритвенные страницы, которые работали намного медленнее. Это позволяет мне использовать общие макеты, что я и хотел начать.

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

...