ASP .NET-роутинг в JavaScript | OTUS

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

ASP .NET-роутинг в JavaScript

В этой короткой статье мы рассмотрим один из способов обработки запросов на JS в ASP .NET.

Если вы занимаетесь веб-разработкой на ASP .NET, вам может в какой-то момент надоесть вновь и вновь указывать URL для отправки запроса при написании очередной формы, отправляющей данные посредством AJAX. Проблему можно решить путём подключения к JavaScript’y роутинга, который, скорее всего, есть у вас на бэкенде.

Выбираем способ реализации

По большему счёту, существуют 2 простых пути реализации поставленной перед нами задачи: • с помощью URL вида route/{routename} c последующим редиректом; • с помощью реплейсмент-тега вида «[Route:%route_name%]» (при отдаче файла он будет меняться на URL cамого роута).

Давайте рассмотрим, как реализовать второй вариант.

Реализация выбранной функциональности

Учитывая, каким образом ASP .NET обрабатывает реквесты, становится понятным, что надо написать кастомный HttpHandler, который станет по регулярному выражению искать в *.js-файлах строку вида «[Route:%route_name%]» с последующей заменой её на искомый URL. В результате мы получим следующий код:

public class JsRoutingHttpHandler : IHttpHandler
{
   public JsRoutingHttpHandler()
   {

   }

   public bool IsReusable
   {
      get { return true; }
   }

   public void ProcessRequest(HttpContext context)
   {
      var phisicalPath = context.Server.MapPath(context.Request.AppRelativeCurrentExecutionFilePath);
      var file = File.ReadAllLines(phisicalPath);
      var routeCatchRegex = new Regex(@"\[Route:([a-zA-Z]+)\]");
      for (int index = 0; index < file.Length; index++) {
         var line = file[index];
         var matches = routeCatchRegex.Matches(line);
         foreach (Match match in matches) {
            var routeName = match.Groups[1];
            var url = "ERROR[NO ROUTE FOUND]";
            if (Resolver.RouteUrl.ContainsKey(routeName.Value)) {
               url = Resolver.RouteUrl[routeName.Value];
            }
            line = line.Replace(match.Value, url);
         }
         context.Response.Output.WriteLine(line);
      }
   }
}

После регистрации данного хэндлера в web.config’e, видим, что всё заработало.

Запрошенный файл:

var url = "[Route:SaveEntity]";

Полученный файл:

var url = "admin/entity/save";

На этом всё, надеемся, изложенная информация была полезной!

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться