如何配置Azure App Service让Blazor PWA的API请求转发至控制器?
解决Blazor WASM托管模式API请求被重定向的问题
1. 检查Server项目的web.config配置
托管模式下,需确保API路由优先于Blazor的 fallback 路由,避免请求被SPA捕获:
- 确认rewrite规则中排除
/api/*路径:<rewrite> <rules> <!-- 优先处理API请求 --> <rule name="API Routes" stopProcessing="true"> <match url="^api/(.*)" /> <action type="None" /> </rule> <!-- Blazor SPA fallback --> <rule name="SPA Fallback" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.html" /> </rule> </rules> </rewrite> - 右键
web.config文件→属性→设置复制到输出目录为「如果较新则复制」,确保部署时该文件被包含。
2. 确认Azure Pipeline的部署源
部署时必须指向Server项目的发布输出,而非单独的Client静态文件:
- 在Pipeline的发布任务中,选择
$(Build.ArtifactStagingDirectory)/<Server项目名>/publish作为部署源。 - 构建阶段使用命令
dotnet publish <Server项目名>.csproj -c Release -o $(Build.ArtifactStagingDirectory)/publish,确保包含后端API的编译文件。
3. 验证API路由注册顺序
检查Server项目的Program.cs,确保API路由注册在SPA fallback之前:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); // 中间件顺序:API路由优先 app.UseRouting(); app.MapControllers(); // 必须在MapFallbackToFile之前 app.MapRazorPages(); app.MapFallbackToFile("index.html"); app.Run();
4. 检查Azure App Service应用设置
- 确认
ASPNETCORE_ENVIRONMENT设置为Production,避免开发环境配置干扰。 - 若启用HTTPS重定向,验证规则不会将API请求意外重定向至SPA页面。
内容的提问来源于stack exchange,提问作者Paul Trotter
相关产品推荐
相关产品推荐

