如何在托管 ASP.NET Web API 中使用 System.IO.File 提供相对路径?

How to provide a relative path using System.IO.File inside a hosted ASP.NET Web API?

我有一个 ASP.NET Web API 作为应用服务托管在 Azure 上。我的工作流每月自动调用一次端点。但是,这些触发器由于以下错误而失败:

"body": "Could not find a part of the path 'C:\home\site\The-Food-Works-WebAPI\Assets\loyalty-template.html'."

在这个端点,我试图通过以下代码访问文件(也在这个网络 api 项目中):

string body = System.IO.File.ReadAllText("..\The-Food-Works-WebAPI\Assets\loyalty-template.html");

如果我必须在本地 运行 端点,一切都会按预期进行。我相信相对路径没问题,但由于它的访问方式(通过 System.IO.File),它希望文件保存在本地?

编辑:(使用嵌入式资源):

var resourceName = "..//The-Food-Works-WebAPI//Assets//loyalty-template.html";
       string body;
       using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
           {
                TextReader tr = new StreamReader(stream);
                body = tr.ReadToEnd();
           }

Azure 现在给出以下错误:

"body": "Value cannot be null. (Parameter 'stream')"

谢谢@Dai,我正在将以上评论转换为答案,以帮助其他社区成员:

因此,在更改您的资源名称并编辑您的 .csproj 为资源设置 <LogicalName> 然后使用 thatresourceName 并且在处理 StreamReader 实例之后通过使用 using 块有望解决问题。

并且建议始终设置显式<LogicalName>,否则MSBuild会根据相对于.csproj的文件路径生成资源名称,这意味着它会改变(相当出乎意料!)如果你曾经在你的文件系统中移动过文件。