在已发布主机上引用 Blazor 服务器端中的静态文件
Posted
技术标签:
【中文标题】在已发布主机上引用 Blazor 服务器端中的静态文件【英文标题】:Reference Static Files in Blazor Server Side When on Published Host 【发布时间】:2021-09-20 03:34:17 【问题描述】:在 Blazor 服务器上,如何在发布到 web(托管)net5.0 时访问目录中的文件。我有一个名为 Templates 的文件夹,我需要将其合并一个 cshtlm 文件。例如,这在本地工作,但在发布时,它会失败“找不到文件”。如果它不在 www 文件夹中,我需要使用控制器吗?新手开始学习了。
public async Task SendEmailAsync()
string contentRootPath = Environment.ContentRootPath;
var templateDir = Path.Combine(contentRootPath, @"Templates") ;
var templateFilePath = Path.Combine(templateDir, "CleanDeskPolicy.cshtml");
try
var vm = new NewAccountVm()
Username = "John Doe",
Message = "Thank you for signing up with us!"
;
await EmailFactory.Create()
.To("XXXXXX@gmail.com")
.Subject("New Account")
**.UsingTemplateFromFile(templateFilePath, vm)**
.SendAsync();
_logs.Add($"DateTime.Now: Email notification was sent successfully ????✔!");
catch (Exception ex)
_logs.Add($"DateTime.Now: Failed to send email notification ❌! (ex.Message)");
【问题讨论】:
【参考方案1】:您需要将文件放在 wwwroot 文件夹中
【讨论】:
【参考方案2】:我使用 IWebHostEnvironment 来获取我的文件的文件路径 - 这在本地和我发布的应用程序中都有效。我的模板文件夹在 wwwroot 中。在每个模板文件的属性中,我将 Built Action 设置为“Content”。
public class MailService : IMailService
private readonly MailSettings _mailSettings;
private readonly IWebHostEnvironment _webHostEnvironment;
public MailService(IOptions<MailSettings> mailSettings, IWebHostEnvironment webHostEnvironment)
_mailSettings = mailSettings.Value;
_webHostEnvironment = webHostEnvironment;
public async Task SendResetPasswordEmailAsync(MailRequest mailRequest, string callBackURL)
string FilePath = _webHostEnvironment.WebRootPath + "\\templates\\ResetPassword.html";
StreamReader str = new StreamReader(FilePath);
string MailText = str.ReadToEnd();
str.Close();
【讨论】:
谢谢。我正在阅读我可以添加排除以使用静态文件。我设置它并且它在本地工作,但在发布到托管服务器时失败。 docs.microsoft.com/en-us/aspnet/core/fundamentals/…. 我明白了 ? 我认为你是,但如果你还没有,你可以尝试在你的启动类中调用 UseStaticFiles(... 在 UseAuthorization() 之前?不幸的是我没有之前尝试在 Web 根目录之外提供文件。以上是关于在已发布主机上引用 Blazor 服务器端中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章