如何处理.NET Core Web API中本地开发和发布的静态文件路径

问题描述 投票:0回答:1

我有一个

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
文件夹,以便它在本地和部署时使用正确的目录?

c# directory asp.net-core-webapi .net-7.0 static-files
1个回答
0
投票

方式1。将文件存储在 wwwroot 下

我在下面分享了示例代码,让我简单解释一下,默认情况下静态文件应该存储在

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");

方式2。将文件存储在主项目下

然后我们应该像下面一样使用它,有关更多详细信息,您可以检查此线程

var fileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "UserFiles"));

var options = new FileServerOptions
{
    FileProvider = fileProvider,
    RequestPath = "/userfiles",
    EnableDirectoryBrowsing = true
};

app.UseFileServer(options);

上述方式,我们仍然需要仔细检查.csproj文件,我们需要确保部署后我们需要的文件夹存在。

ASP.NET Core:发布时排除或包含文件

© www.soinside.com 2019 - 2024. All rights reserved.