Можно ли в проекте .NET Core MVC, разработанном в Visual Studio, настроить виртуальное приложение для встроенного веб-сервера?

У меня в настройках среды указано следующее: <br/> <pre><code>"applicationUrl": "https://localhost:7040;http://localhost:5134"</code></pre> <br/> В результате приложение открывается по адресам: <br/> <pre><code>https://localhost:7040
http://localhost:5134</code></pre> <br/> Однако мне нужно, чтобы оно открывалось по следующим адресам: <br/> <pre><code>https://localhost:7040/dev
http://localhost:5134/dev</code></pre> <br/> Как я могу изменить настройки локальной среды разработки, чтобы достичь этого? Я знаю, как сделать это на продакшене, но не могу понять, возможно ли настроить это локально. <br/> <br/> (Я использую .NET 8 и Visual Studio 2022)
  • 3 апреля 2025 г. 21:44
Ответы на вопрос 2
Да, вы можете настроить виртуальный путь для вашего проекта ASP.NET Core MVC в среде разработки. Хотя встроенный веб-сервер Kestrel не поддерживает настройку виртуальных путей напрямую, вы можете использовать middleware, чтобы достичь нужного поведения. Вот основные шаги, которые помогут вам сделать это:

1. **Измените маршрутизацию** в вашем проекте, добавив специальный путь `/dev`.

2. **Настройте middleware** для обработки путей.

### Пример настройки

1. **Изменение маршрутизации в `Startup.cs` или `Program.cs`:**

   В зависимости от структуры вашего проекта, вам нужно добавить дополнительные маршруты в метод `Configure` класса `Startup` или в ваш основной файл `Program.cs`. Если у вас есть метод `Configure`, вы можете сделать что-то вроде следующего:

   ```csharp
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
       // Другие middleware...

       app.UseRouting();

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

       // Другие middleware...
   }
   ```

   Если используете `Program.cs`, то это будет выглядеть следующим образом:

   ```csharp
   var builder = WebApplication.CreateBuilder(args);
   
   var app = builder.Build();
   
   app.UseRouting();
   
   app.MapControllerRoute(
       name: "default",
       pattern: "dev/{controller=Home}/{action=Index}/{id?}");
   
   app.Run();
   ```

2. **Проверьте конфигурацию `launchSettings.json`:**

   Убедитесь, что ваш файл `Properties/launchSettings.json` остается без изменений, так как у вас уже правильно указаны адреса:

   ```json
   "profiles": {
       "IIS Express": { /* Ваши настройки */ },
       "YourProjectName": {
           "commandName": "Project",
           "launchBrowser": true,
           "applicationUrl": "https://localhost:7040/dev;http://localhost:5134/dev",
           "environmentVariables": {
               "ASPNETCORE_ENVIRONMENT": "Development"
           }
       }
   }
   ```

3. **Проверка работы:**

   Запустите приложение и проверьте доступ по новым URL:

   - `https://localhost:7040/dev`
   - `http://localhost:5134/dev`

Теперь ваше приложение должно открываться по указанным путям. Если вы хотите добавить ещё какие-то специальности или кастомные маршруты, вы можете использовать дополнительные конфигурации в вашем `Startup.cs` или `Program.cs`.
На проде у тебя перед приложением, скорее всего, стоит какой-нибудь веб-сервер, который настроен как обратный прокси и в нём ты можешь менять логику обработки запросов не залезая в само приложение. 

Когда ты запускаешь приложение локально, у тебя нет никакого отдельного веб-сервера (ну вроде по умолчанию на Винде будет(по крайней мере раньше так было) iis express, но это не считается).

Так что для добавления префиксов к маршруту тебе надо залезть в своё приложение.

Чтобы не менять роутинг всех методов/контроллеров/ручек, ты можешь воспользоваться методом UsePathBase , который добавит к тебе в конвеер обработки запроса соответствующий middleware, который будет отрезать от запроса указанный префикс перед передачей запроса дальше (чтобы с точки зрения роутера запрос выглядел так, будто запрос пришёл на нормальный путь без префикса)

Вот тут подробнее это объясняется и с примерами:
https://andrewlock.net/understanding-pathbase-in-a...
Похожие вопросы