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

Azure Pipeline构建多项目部署后仅能访问Blazor WASM无法访问API怎么办

问题描述

现有包含Web API项目与Blazor WebAssembly项目的解决方案,Azure Pipeline生成发布制品流程运行正常,但部署完成访问对应域名时,仅能打开Blazor WebAssembly站点,无法正常访问Web API接口。已自定义名为BackEndRelease的生成配置,在配置中取消勾选Blazor项目后重新部署,问题未改善。
当前使用的Azure Pipeline配置如下:

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more.

# trigger:
# - master

pool:
  vmImage: 'windows-2022'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'BackEndRelease'

steps:
- task: UseDotNet@2
  displayName: Use .NET 6.0
  inputs:
    packageType: 'sdk'
    version: '6.0.x'
    
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: PublishBuildArtifacts@1
问题根因

部署异常由三个配置错误共同导致:

  • Pipeline构建范围错误:当前配置直接匹配整个解决方案执行打包,即使你在BackEndRelease配置里取消勾选Blazor项目,只要两个项目的生成输出路径存在重叠,Blazor的静态发布产物就会混入最终部署包,覆盖API项目的配置文件
  • 构建参数冗余:当前msbuild参数中携带了本地IIS部署专用的DesktopBuildPackageLocation、DeployIisAppPath配置,会导致生成的部署包默认适配本地IIS默认站点,和实际部署的站点路由规则不匹配
  • 应用中间件顺序错误:如果API项目中引入了Blazor WASM的托管支持,一旦把Blazor的兜底路由放在API路由之前,所有未匹配到静态文件的请求(包括API接口请求)都会被重定向到Blazor的index.html,接口自然无法访问
修复方案

按以下顺序调整配置即可解决问题:

  1. 收窄Pipeline构建范围
    不要直接构建整个解决方案文件,将VSBuild任务的构建目标从$(solution)修改为你的Web API项目的csproj文件路径(例如src/xxx.WebApi/xxx.WebApi.csproj),从构建源头排除Blazor项目的产物。
  2. 修正构建参数
    替换VSBuild任务中的msbuildArgs配置为以下内容,移除本地IIS专用的冗余参数:
    /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\WebApp.zip"
    
  3. 修正API项目中间件顺序
    打开API项目的Program.cs(.NET 6+)或Startup.cs,严格按照以下顺序注册中间件,确保API路由优先级高于Blazor路由和静态文件:
    // 基础中间件(异常处理、HTTPS跳转等)
    app.UseHttpsRedirection();
    
    // 路由、鉴权中间件
    app.UseRouting();
    app.UseAuthorization();
    
    // 首先映射API接口路由
    app.MapControllers();
    
    // 如果需要同站点部署Blazor WASM,再添加以下配置,不需要可以直接删除
    app.UseBlazorFrameworkFiles();
    app.UseStaticFiles();
    // Blazor兜底路由必须放在最后
    app.MapFallbackToFile("index.html");
    
  4. 验证部署包内容
    重新运行Pipeline生成制品后,下载WebApp.zip解压校验:
    • 包根目录必须存在API项目的对应dll文件、web.config配置文件
    • 如果不需要同站点部署Blazor,包内不能出现_framework文件夹、index.html等Blazor产物,如果存在说明构建范围配置错误,需要重新检查csproj路径是否正确
  5. 部署验证
    重新部署后优先访问已知的GET接口(例如/api/health),确认接口返回正常响应后,再访问Blazor页面对应路由即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:33:14