我正在.Net Core 2.1中创建项目api,在我的创业.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;
}
现在,在主 API 中,我调用 mappath:
public ActionResult<string> GetListPowerSwitch()
{
try
{
var path = MapPath("../DataDen/DataDen.xml");
return path;
}
catch (Exception ex)
{
return ex.ToString();
}
}
在本地调试时效果很好。但是,当我将其作为新应用程序发布到 IIS Web 服务器时,它返回 ex。ToString(( 表示:
System.ArgumentNullException:值不能为空。 参数名称:路径 1 at System.IO.Path.Combine(String path1, String path2( at LedControlPowerApi.Controllers.PowerControlController.GetListPowerSwitch(( in E:\PROJECT EMEC\LedControlPrj\LedControlPowerApi\Controllers\PowerControlController.cs:line 55
第 55 行是:var path = MapPath("../DataDen/DataDen.xml");
有人告诉我如何修复此错误?谢谢
我认为您需要使用ContentRoot
而不是WebRoot
因为对于 ASP.NET Core 2 API项目,已发布的API项目中没有wwwroot
文件夹。
检查此 https://github.com/aspnet/Mvc/issues/6688