我有一个
mailService
,它使用静态 .html 文件作为发送电子邮件的电子邮件模板。
我当前的目录结构如下所示:
Infrastructure (project name)
Templates
contact.html
welcome.html
在本地主机上我得到这样的模板:
using (StreamReader reader = new StreamReader(Path.Combine("Infrastructure/Templates", templateType)))
现在部署网站时,在 bin 文件夹中,它不会将
Infrastructure
部署为目录的一部分(我认为这是因为它是实际的项目名称)。它仅部署 Templates
文件夹及其内容,例如wwwroot/模板/.
如何引用
Templates
文件夹,以便它在本地和部署时使用正确的目录?
我在下面分享了示例代码,让我简单解释一下,默认情况下静态文件应该存储在
wwwroot
文件夹下。我们应该使用 _env.WebRootPath
来实现这一点。欲了解更多详情,您可以参考这个帖子。
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IWebHostEnvironment _env;
public HomeController(ILogger<HomeController> logger, IWebHostEnvironment env)
{
_logger = logger;
_youtube = new YoutubeClient();
_env = env;
}
//
...
string diretorioDeSaida = Path.Combine(_env.WebRootPath, "templates");
然后我们应该像下面一样使用它,有关更多详细信息,您可以检查此线程:
var fileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "UserFiles"));
var options = new FileServerOptions
{
FileProvider = fileProvider,
RequestPath = "/userfiles",
EnableDirectoryBrowsing = true
};
app.UseFileServer(options);
上述方式,我们仍然需要仔细检查.csproj文件,我们需要确保部署后我们需要的文件夹存在。