部署至Azure App Service子目录时Blazor应用JSON文件404问题
问题回顾
将Blazor Web App部署到Azure App Service的wwwroot/subdir子目录时,加载JSON文件返回404错误;部署到根目录则正常。本地运行无问题,FTP确认JSON文件存在,改为.txt后缀可正常访问。已在web.config中添加<remove fileExtension=".json" />和<mimeMap fileExtension=".json" mimeType="application/json" />但无效,服务器日志显示SECURITY_DENIED_BY_MIMEMAP错误,仅.json.gz格式文件可正常访问。
解决方案
1. 为子目录单独配置web.config
Azure App Service的配置规则按目录层级生效,根目录的web.config不会自动覆盖子目录的默认限制。需要在subdir子目录下创建独立的web.config,内容如下:
<configuration> <system.webServer> <staticContent> <!-- 移除默认的JSON MIME映射,避免冲突 --> <remove fileExtension=".json" /> <!-- 显式添加JSON的MIME类型 --> <mimeMap fileExtension=".json" mimeType="application/json" /> </staticContent> <!-- 显式允许JSON文件访问,解决安全限制 --> <security> <requestFiltering> <fileExtensions> <remove fileExtension=".json" /> <add fileExtension=".json" allowed="true" /> </fileExtensions> </requestFiltering> </security> </system.webServer> </configuration>
2. 确保Github Actions部署脚本同步子目录配置
检查你的Github Actions部署步骤,确认子目录下的web.config被正确上传到Azure App Service的对应路径。例如使用azure/webapps-deploy动作时,确保package参数包含子目录内容,或单独指定子目录的同步规则。
3. 强制刷新Azure缓存并重启服务
Azure App Service可能缓存旧的配置或文件,部署完成后:
- 进入Azure Portal的App Service页面,点击重启按钮;
- 或者通过Kudu工具(
https://your-app-name.scm.azurewebsites.net)的CMD控制台,执行以下命令清除子目录缓存:
之后重新部署项目,确保文件和配置完全更新。del /s /q %home%\site\wwwroot\subdir\*.json
4. 验证配置生效
部署完成后,直接访问子目录下的JSON文件URL(如https://your-app-name.azurewebsites.net/subdir/your-file.json),确认返回200状态码和正确的JSON内容。
内容的提问来源于stack exchange,提问作者Gareth Waterhouse

