Как можно получить доступ к папке wwwroot из другого проекта в веб-сервисе Web API?

У меня есть проблемы с получением доступа к папке "wwwroot" из основного проекта в моей программе на ASP.NET Core 8 Web API. Я ранее использовал интерфейс IWebHostEnvironment для доступа к нему в других проектах через внедрение зависимостей (DI), но сейчас я не могу использовать его. Я установил NuGet пакеты Microsoft.AspNetCore.Hosting и Microsoft.AspNetCore.Hosting.Abstractions, но интерфейс по-прежнему не доступен.

Я также попытался использовать интерфейс IHostEnvironment, но его свойство WebRootPath почему-то равно null.

По умолчанию в моем проекте отсутствовало объявление app.UseStaticFiles, и я его добавил. Возможно, проблема в этом месте:

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseStaticFiles();

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
  • 6 декабря 2023 г. 15:50
Ответы на вопрос 2
Если вы не можете использовать IWebHostEnvironment или IHostEnvironment для доступа к папке wwwroot, вы можете воспользоваться относительным путем к папке wwwroot.

Вам понадобится использовать метод Directory.GetCurrentDirectory() для получения текущего рабочего каталога и, затем, сконструировать путь к папке wwwroot относительно этого каталога.

Пример кода, показывающий, как получить доступ к папке wwwroot из другого проекта в веб-сервисе Web API, может выглядеть следующим образом:

```csharp
using System.IO;

// ...

// Получение текущего рабочего каталога
string currentDirectory = Directory.GetCurrentDirectory();

// Конструирование пути к папке wwwroot
string wwwrootPath = Path.Combine(currentDirectory, "wwwroot");

// ...

// Пример использования пути к папке wwwroot
string filePath = Path.Combine(wwwrootPath, "example.txt");
string fileContent = File.ReadAllText(filePath);
```

В этом примере мы используем Directory.GetCurrentDirectory() для получения текущего рабочего каталога. Затем мы используем Path.Combine() для склеивания пути к папке wwwroot относительно текущего рабочего каталога. В конечном итоге, мы можем использовать этот путь для доступа к файлам в папке wwwroot, например, читая содержимое файла example.txt.
Конкретно в моём проекте оказало, что папки wwwroot вообще не существовало. Под капотом метод вообще не отрабатывалDirectory.CreateDirector(...)Папку создал вручную в корне проекта, всё заработало.
Похожие вопросы