You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET5 Blazor Server添加文件上传后发布报HTTP 500.30启动失败问题

问题根因

报错日志已明确指向System.IO.DirectoryNotFoundException: D:\home\site\wwwroot\Files\,本质是应用启动时要绑定的Files静态资源目录,在发布后的Azure站点根目录下不存在。本地环境因为提前创建过或者调试时自动生成了该目录,所以运行无异常。

可行解决方案

步骤1:修改Startup.cs的静态文件注册逻辑

在注册自定义静态文件中间件前,先主动判断目标目录是否存在,不存在则自动创建,修改后的代码如下:

// 先获取Files目录路径
var filesPath = Path.Combine(Directory.GetCurrentDirectory(), "Files");
// 目录不存在则自动创建
if (!Directory.Exists(filesPath))
{
    Directory.CreateDirectory(filesPath);
}
// 再注册静态文件中间件
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(filesPath),
    RequestPath = "/Files"
});
app.UseRouting();

步骤2:可选配置(针对Azure App Service部署场景)

如果你的文件上传需要持久化存储,避免Azure App Service实例重启/切换时上传的文件丢失,可以做如下配置:

  • 进入Azure门户对应Web应用的配置页,找到应用程序设置
  • 添加名为WEBSITE_APP_TEMP_STORAGE_DISABLED的设置,值设为1,保存后重启应用
  • 也可以将上传目录指定到Azure的持久化存储路径%HOME%/Data下,避免站点重新发布时覆盖wwwroot内的文件

步骤3:发布校验

如果你的项目中Files目录是作为项目结构的一部分存在,发布前确认该目录下至少有一个占位文件(比如空的.gitkeep文件),并且在项目的.csproj文件中配置该目录的发布规则,确保发布时会将目录一起部署:

<ItemGroup>
  <None Include="Files\**" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

内容的提问来源于stack exchange,提问作者Aakburns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:24:00