Базовая маршрутизация JSON в .NET Core

Ранее в ASP.NET MVC

<routes>
<add name = "VehicleDetailRoute" url = "TwoWheeler/VehicleDetail/{id}">
  <defaults controller = "Integration" action = "VehicleDetail" id = "Optional" />
</add>
</routes>

public void RegisterRoutes(RouteCollection routes)
{ //Fill the route table section
  RouteSection routesTableSection = GetRouteTableConfigurationSection();

  if (routesTableSection == null || routesTableSection.Routes.Count <= 0)
    return;

  for (int routeIndex = 0; routeIndex < routesTableSection.Routes.Count; routeIndex++)
  {
    //base on different route, we have created dynamic routes and add in to
    var routeElement = routesTableSection.Routes[routeIndex];

    var route = new Route(
        routeElement.Url,
        GetDefaults(routeElement),
        GetConstraints(routeElement),
        GetDataTokens(routeElement),
        GetInstanceOfRouteHandler(routeElement));

    routes.Add(routeElement.Name, route);
  }
}

Здесь Клиент видит TwoWheeler / VehicleDetail / в браузере, но внутри он рассматривает контроллер как Интеграция и действие как "АвтомобильДеталь"

Теперь в .Net Core мы создали файл JSON и хотим его прочитать. (хотите перейти на .Net Core 2.0 из ASP.NET MVC). При необходимости вы можете изменить формат или JSON.

{
"routes": {
    "VehicleDetailRoute": {
        "url": "TwoWheeler/VehicleDetail/{id}",
        "controller": "Integration",
        "action": "VehicleDetail",
        "id": "Optional"
    }
  }
}
  1. url: отображается в браузере
  2. контроллер: оригинальный контроллер
  3. действие: исходное действие
  4. VehicleDetailRoute: название маршрута

Пока что я прочитал конфигурацию в файле Запускать

public Startup(IConfiguration configuration)
{
  var configurationBuilder = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  .AddJsonFile("routes.json", optional: false, reloadOnChange: true);
   Configuration = configurationBuilder.Build();
}

Добавлен services.AddRouting(); в ConfigureServices

В методе Configure добавлен app.UseStaticFiles();

Построить маршрутизацию

var routeBuilder = new RouteBuilder(app);

routeBuilder.MapGet("{route}", context =>
{
  var routeMessage = Configuration.AsEnumerable()
                     .FirstOrDefault(r => r.Key == context.GetRouteValue("route")
                     .ToString())
                .Value;

 var defaultMessage = Configuration.AsEnumerable()
                      .FirstOrDefault(r => r.Key == "default")
                      .Value;

 var response = (routeMessage != null) ? routeMessage : defaultMessage;

 return context.Response.WriteAsync(response);
 });
 app.UseRouter(routeBuilder.Build());

Вопрос: на основе URL-адреса, введенного клиентом, я хочу перенаправить действие с частицами. Хотите выполнить метод ниже с динамическим вводом

app.UseMvc(routes =>
{
  routes.MapRoute(
  name: "default",
  template: "{controller=Integration}/{action=VehicleDetailOnline}/{id?}");
});

Проверенная ниже ссылка: radu-matei.com - c-sharpcorner - Переполнение стека

Есть ли что-нибудь, что мешает вам использовать маршрутизацию атрибутов?

T.Aoukar 22.05.2018 09:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
688
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы рассматривали возможность перезаписи URL для этого? вы можете настроить их со своего хост-сервера (IIS, Apache и т. д.) или использовать для этого промежуточное ПО .Net Core.

Перейдите по этой ссылке, чтобы узнать, как его использовать: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-2.0&tabs=aspnetcore2x

Редактировать:

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

Возможно, вам придется переписать URL-адрес как регулярное выражение, чтобы он работал лучше, поэтому это будет примерно так:

{
"routes": {
    "VehicleDetailRoute": {
        "url": "^TwoWheeler/VehicleDetail/(.*)",
        "controller": "Integration",
        "action": "VehicleDetail",
        "id": "Optional"
    }
  }
}

Тогда код установки будет таким:

public void Configure(IApplicationBuilder app)
{
    var options = new RewriteOptions();
    foreach(var rule in redirectRules){
        options.AddRewrite(rule.url,rule.controller+'/'+rule.action+"/$1")
    }    
    app.UseRewriter(options);

    app.Run(context => context.Response.WriteAsync(
        $"Rewritten or Redirected Url: " +
        $"{context.Request.Path + context.Request.QueryString}"));
}

Простое объяснение того, что происходит, заключается в том, что когда запрос начинается с TwoWheeler/VehicleDetail/, эта часть будет изменена на Integration/VehicleDetail/.

Я действительно предлагаю вам осмотреть модули Url Rewrite на вашем веб-сервере, чтобы увидеть все трюки, которые вы можете с ним сделать.

У вас есть демо по этому поводу?

Parth Akbari 22.05.2018 10:31

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

T.Aoukar 22.05.2018 12:56

Спасибо тебе, друг. Очень признателен.

Parth Akbari 22.05.2018 13:19

Здесь можно увидеть «Переписанный или перенаправленный URL: ...» на белой странице, но я хочу перенаправить частичный URL.

Parth Akbari 22.05.2018 13:42

Что ж, вам нужно удалить приложение. Запустите, так как оно закоротит ваш запрос здесь, у меня оно было для демонстрации. Удалите его и используйте обычную настройку после этого (MVC или другое промежуточное ПО, которое вы используете).

T.Aoukar 22.05.2018 14:21

Я новичок в .net Core, поэтому не знаю, что делать после удаления app.Run

Parth Akbari 22.05.2018 15:05

Как и в коде, который вы указали в своем вопросе: app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Integration}/{action=VehicleDetailOnline}/{id?}‌​"); });

T.Aoukar 23.05.2018 08:30

Другие вопросы по теме