我有一个在Azure上运行的ASP.NET Core应用程序。该应用程序以明文和HTML格式发送各种电子邮件。我在Resources
文件夹中创建了一个子文件夹,名为EmailTemplates
,在其中存储了所有HTML和TXT模板。示例路径可能是:
\src\WebProject\Resources\EmailTemplates\Welcome.html
我通过以下方式访问EmailService.cs
类中的文件:
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates", "Welcome.html");
var htmlTemplate = await File.ReadAllTextAsync(filePath);
当在IIS和Kestrel上的本地环境上运行时,这非常有用。但是,当部署到Azure时,我收到一条IO错误消息:
System.IO.DirectoryNotFoundException
An unhandled exception has occurred: Could not find a part of the path 'D:\home\site\wwwroot\Resources\EmailTemplates\Welcome.html'.
我在StackOverflow上发现了类似的问题,但是the answer快6岁了。我不确定,自从Azure在过去几年中发生重大变化以来,它是否仍然适用。我还查看了官方文档(1) (2),但没有发现有关Azure的任何特殊信息。
在ASP.NET Core和Azure中存储和检索电子邮件模板(和其他静态文件)的正确方法是什么?
答案 0 :(得分:3)
确保您的静态文件是项目的一部分。
并将它们明确标记为内容,并始终标记为Copy to output folder
->。
答案 1 :(得分:0)
当我们将.Net Core Web应用发布为Azure时,除静态文件外,其所有内容都放置在此路径[D:\ home \ site \ wwwroot]下。
根据您的描述,我们需要在项目的wwwroot下创建Resources
文件夹。然后,在发布到天蓝色后,我们可以使用以下代码访问文件:
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Resources", "EmailTemplates", "Welcome.html");
我们可以通过KUDU以天蓝色查看我们项目的目录信息:Using KUDU with Microsoft Azure Web Apps
更新:
我们需要允许将Resources
文件夹复制到csproj文件的发布目录,如下所示:
<Content Include="Resource\*">
<CopyToPublishDirectory>always</CopyToPublishDirectory>
</Content>
答案 2 :(得分:0)