在已发布主机上引用 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 服务器端中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 gRPC 服务器作为主机调试 Blazor Webassembly

IIS 上的 Blazor 主机显示空白页

blazor 项目上的非 blazor 文件夹

在 Blazor 中引用动态创建的控件

Qt 静态应用程序无法在已部署的系统上运行

如何修复 RemoteJSDataStream NullReferenceException?