Azure Pipelines部署Blazor WASM,Static Web App不识别staticwebapp.config.json
解决Blazor WASM部署Azure Static Web App导航回退及登录回调404问题
核心问题定位
你的staticwebapp.config.json配置本身无语法问题,但Azure Static Web App(ASWA)未正确读取该文件,导致导航回退规则失效,进而authentication/login-callback这类单页应用路由返回404。问题根源大概率是CI/CD部署过程中配置文件未被正确纳入部署包,或部署路径配置错误。
修复步骤
1. 确认配置文件位置
staticwebapp.config.json必须放在Blazor WASM项目的wwwroot目录下——编译发布后,该文件会被复制到发布输出的根目录,这是ASWA识别配置文件的要求。不要将其放在项目根目录,ASWA不会读取该位置的配置。
2. 确保项目文件包含配置文件
检查.csproj文件,添加以下配置确保staticwebapp.config.json被复制到发布目录:
<ItemGroup> <None Update="wwwroot\staticwebapp.config.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </None> </ItemGroup>
这一步能保证发布时,配置文件被同步到bin/Release/netX.X/publish/wwwroot目录下。
3. 完整可用的Azure Pipelines YAML部署脚本
放弃PublishPipelineArtifact@1的间接部署方式,直接使用官方AzureStaticWebApp@0任务(ASWA推荐的部署方式),以下是完整脚本:
trigger: - main # 替换为你的目标分支名 pool: vmImage: 'ubuntu-latest' steps: - task: UseDotNet@2 displayName: '安装匹配的.NET SDK' inputs: packageType: 'sdk' version: '7.x' # 替换为你的Blazor项目使用的.NET版本 - task: DotNetCoreCLI@2 displayName: '构建并发布Blazor应用' inputs: command: 'publish' projects: '**/YourBlazorProject.csproj' # 替换为你的项目路径 arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)/wwwroot' zipAfterPublish: false - task: AzureStaticWebApp@0 displayName: '部署到Azure Static Web App' inputs: app_location: 'wwwroot' # 发布输出的wwwroot目录路径,确保配置文件在此目录下 api_location: '' # 独立Blazor WASM无后端API,留空即可 output_location: '' # 无需额外指定输出目录 azure_static_web_apps_api_token: $(AZURE_STATIC_WEB_APPS_API_TOKEN)
脚本关键说明:
UseDotNet@2:确保安装与项目匹配的.NET SDK版本,避免构建失败。DotNetCoreCLI@2:直接将发布产物输出到$(Build.ArtifactStagingDirectory)/wwwroot,zipAfterPublish: false避免打包,让ASWA能直接读取配置文件。AzureStaticWebApp@0:app_location指定应用根目录,必须指向包含staticwebapp.config.json的路径。AZURE_STATIC_WEB_APPS_API_TOKEN需在Azure Pipelines库中添加为变量,值来自ASWA门户的“部署令牌”(在ASWA资源的「概述」页面获取)。
4. 验证部署结果
部署完成后,进入ASWA门户的「配置」->「路由」页面,查看是否自动加载了staticwebapp.config.json中的导航回退规则。若规则已显示,说明配置文件被正确读取,此时测试authentication/login-callback路径,应能正常跳转不再返回404。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

