Как внедрить метод расширения AddControllers в проект MAUI?

Я использую объединенный проект Blazor и MAUI. При смене локализации с помощью <a href="https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-9.0" rel="nofollow">Cookie + Controller</a> в MAUI возникает ошибка "страница не найдена". В веб-версии все работает нормально. Могу предположить, что проблема связана с тем, что контроллеры не добавляются через метод расширения: <code class="cs">builder.Services.AddControllers();</code> . Вот список установленных пакетов: <br/>
  • 25 февраля 2025 г. 9:14
Ответы на вопрос 1
Чтобы настроить метод расширения `AddControllers` в проекте MAUI с использованием объединенного проекта Blazor, потребуется выполнить несколько шагов. В MAUI Blazor вы можете использовать контроллеры для обработки API-запросов, включая локализацию и глобализацию. 

Вот шаги, которые могут помочь вам внедрить контроллеры в ваш проект:

1. **Добавьте необходимые пакеты**: Убедитесь, что у вас установлены правильные пакеты. Вам понадобятся следующие NuGet пакеты:

   - `Microsoft.AspNetCore.Mvc.NewtonsoftJson`
   - `Microsoft.AspNetCore.Mvc`

   Вы можете добавить их через командную строку:
   ```bash
   dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
   dotnet add package Microsoft.AspNetCore.Mvc
   ```

2. **Настройте `MauiProgram.cs`**: В файле `MauiProgram.cs` добавьте метод `AddControllers()`. Это обычно делается в методе `CreateMauiApp`. 
   
   Вот пример того, как можно это сделать:

   ```csharp
   using Microsoft.AspNetCore.Components.WebView.Maui;
   using Microsoft.Extensions.DependencyInjection;

   public static class MauiProgram
   {
       public static MauiApp CreateMauiApp()
       {
           var builder = MauiApp.CreateBuilder();
           builder
               .UseMauiApp<App>()
               .ConfigureFonts(fonts =>
               {
                   fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                   fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
               });

           // Добавьте контроллеры
           builder.Services.AddControllers();

           // Регистрация Blazor
           builder.Services.AddMauiBlazorWebView();

           return builder.Build();
       }
   }
   ```

3. **Создайте контроллеры**: Создайте классы контроллеров, наследуя их от `ControllerBase`. Например:

   ```csharp
   using Microsoft.AspNetCore.Mvc;

   [Route("api/[controller]")]
   [ApiController]
   public class LocalizationController : ControllerBase
   {
       [HttpGet]
       public IActionResult Get()
       {
           // Ваш код для обработки запроса
           return Ok();
       }
   }
   ```

4. **Настройка маршрутизации**: Убедитесь, что ваши маршруты правильно настроены. Если вы используете атрибуты для маршрутов, убедитесь, что они совпадают с теми, что вы ожидаете.

5. **Интеграция с Blazor**: Возможно, вам придется настроить некоторые компоненты Blazor, чтобы они взаимодействовали с вашими контроллерами, особенно в части локализации.

6. **Настройка локализации**: Обратите внимание, что после добавления контроллеров необходимо также настроить соответствующий сервис локализации. Вы можете использовать методы расширения в `MauiProgram.cs` для добавления поддержки локализации:

   ```csharp
   builder.Services.AddLocalization();
   ```

7. **Потестируйте приложение**: После всех вышеуказанных шагов, протестируйте ваше приложение. Убедитесь, что ваши маршруты API работают достаточно хорошо.

Если вы следовали этому процессу и все еще испытываете трудности, убедитесь, что у вас нет конфликтов маршрутов и что путь к вашему контроллеру правильно настроен.
Похожие вопросы