Я создаю 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");
Кто-нибудь подскажет, как исправить эту ошибку? Спасибо