Базовая маршрутизация JSON в .net Core - PullRequest
0 голосов
/ 22 мая 2018

Ранее в 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 / в браузере, но внутри он рассматривает контроллер как Интеграция и действие как " 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(); in ConfigureServices

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

Build Routing

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 - StackOverflow

1 Ответ

0 голосов
/ 22 мая 2018

Рассматривали ли вы использование переписывания 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 на вашем веб-сервере, чтобы увидеть все приемы, которые вы можетеделать с этим.

...