Не в состоянии использовать IHostingEnvironment, чтобы получить путь - PullRequest
0 голосов
/ 31 августа 2018

Я создаю API проекта в .Net Core 2.1, в моем файле startup.cs я добавил:

services.AddSingleton<IPathProvider, PathProvider>();  

После этого создайте интерфейс и класс IPathProvider:

public interface IPathProvider
{
    string MapPath(string path);
}

public class PathProvider : IPathProvider
{
    private IHostingEnvironment _hostingEnvironment;

    public PathProvider(IHostingEnvironment environment)
    {
        _hostingEnvironment = environment;
    }

    public string MapPath(string path)
    {
        var filePath = Path.Combine(_hostingEnvironment.WebRootPath, path);
        return filePath;
    }
}

И тогда в моем файле api cs я пишу код:

private IHostingEnvironment _hostingEnvironment;

    public PowerControlController(IHostingEnvironment environment)
    {
        _hostingEnvironment = environment;
    }
public string MapPath(string path)
    {
        var filePath = Path.Combine(_hostingEnvironment.WebRootPath, path);
        return filePath;
    }

Теперь в main api я вызываю mappath:

public ActionResult<string> GetListPowerSwitch()
    {
        try
        {
            var path = MapPath("../DataDen/DataDen.xml");
            return path;
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }

Хорошо работает при локальной отладке. Но когда я публикую его на веб-сервере IIS как новое приложение, он возвращает ex.ToString (), который:

System.ArgumentNullException: значение не может быть нулевым. Имя параметра: путь1 в System.IO.Path.Combine (String path1, String path2) в LedControlPowerApi.Controllers.PowerControlController.GetListPowerSwitch () в E: \ PROJECT EMEC \ LedControlPrj \ LedControlPowerApi \ Controllers \ PowerControlController.cs: строка 55

Строка 55: var path = MapPath("../DataDen/DataDen.xml");
Кто-нибудь подскажет, как исправить эту ошибку? Спасибо

1 Ответ

0 голосов
/ 31 августа 2018

Я думаю, вам нужно использовать ContentRoot вместо WebRoot, потому что для проекта API ASP.NET Core 2 в опубликованном проекте API нет папки wwwroot.

Проверьте это https://github.com/aspnet/Mvc/issues/6688

...