Как объединить путь с WebRootPath - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно загрузить некоторые файлы на сервер, используя мое приложение, и мне нужно указать полный путь к папке, в которую я хочу сохранить файлы.Я использую Path.Combine метод с webHostEnvironment.WebRootPath путем к дополнительным папкам из appsettings.json и именем файла.Код выглядит следующим образом:

var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
var path = Path.Combine(webHostEnvironment.WebRootPath, pathString, picture.Name);

И проблема в том, что webHostEnvironment.WebRootPath просто опущен в переменную path (путь выглядит как pathString + picture.Name).

Любая идея, как получить правильный путь?

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Вы должны оформить полную документацию для Path.Combine. Есть некоторые странные вещи, которые могут случиться. Исходя из того, что вы описываете, кажется, что pathString из вашего файла конфигурации имеет корень (то есть это не относительный путь).

var path = Path.Combine("path1", "c:\path2", "path3");
// path is c:\path2\path3, since an argument with a root overrides any previous argument
0 голосов
/ 27 мая 2019

Если вы используете Asp.net core 3, используйте IWebHostEnvironment вместо IHostingEnvironment.Вставьте IWebHostEnvironment в качестве зависимости в зависимый класс. https://github.com/aspnet/AspNetCore/issues/7749

public class HomeController : Controller
{
    private readonly IWebHostEnvironment _webHostEnvironment;

    public HomeController(IWebHostEnvironment webHostEnvironment)
    {
        _webHostEnvironment= webHostEnvironment;
    }

    public IActionResult Index()
    {
        return Content(_webHostEnvironment.WebRootPath + "\n" + _webHostEnvironment.ContentRootPath);
    }
}

Когда Microsoft.Extensions.Hosting был представлен в 2.1, некоторые типы, такие как IHostingEnvironment и IApplicationLifetime, были скопированы из Microsoft.AspNetCore.Hosting.Некоторые изменения 3.0 приводят к тому, что приложения включают в себя пространства имен Microsoft.Extensions.Hosting и Microsoft.AspNetCore.Hosting.Любое использование этих дублирующих типов приводит к ошибке компилятора с «неоднозначной ссылкой» при обращении к обоим пространствам имен.

Эта ошибка была исправлена ​​в 3.0.0-preview3 путем пометки следующих типов как устаревших и замены их новыми типами.В новых типах не было никаких изменений поведения, только присвоение имен.

Obsolete types (warning):

Microsoft.Extensions.Hosting.IHostingEnvironment
Microsoft.AspNetCore.Hosting.IHostingEnvironment
Microsoft.Extensions.Hosting.IApplicationLifetime
Microsoft.AspNetCore.Hosting.IApplicationLifetime
Microsoft.Extensions.Hosting.EnvironmentName
Microsoft.AspNetCore.Hosting.EnvironmentName

New types:

Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment
Microsoft.Extensions.Hosting.IHostApplicationLifetime
Microsoft.Extensions.Hosting.Environments

Обратите внимание, что новые методы расширения IHostEnvironment IsDevelopment, IsProduction и т. Д. Находятся в пространстве имен Microsoft.Extensions.Hosting, которое может потребоваться длябыть добавлен в ваше приложение.

Для 3.0 старый и новый типы будут доступны из контейнеров внедрения зависимостей HostBulder и WebHostBuilder.Старые типы будут удалены в 4.0.

0 голосов
/ 27 мая 2019

В ASP.NET Core физические пути как к корневому веб-каталогу, так и к корневым каталогам содержимого можно получить, внедрив и запросив службу IHostingEnvironment:

 public class HomeController : Controller
{
    private readonly IHostingEnvironment _hostingEnvironment;

    public HomeController(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    public ActionResult Post(Picture picture)
    {
        var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
        var path = Path.Combine(_hostingEnvironment.WebRootPath, pathString, picture.Name);
        return Content(path);
    }
}

Вы можете взглянуть на Получение корневого веб-пути и корневого каталога содержимого в ASP.NET Core .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...