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

Blazor客户端新API控制器失效,仅默认WeatherForecastController可用

解决Azure B2C认证后Blazor新增API控制器返回HTML而非JSON的问题

以下是针对你遇到问题的具体排查和解决步骤:

1. 检查中间件注册顺序

这是最常见的触发原因:如果Blazor的SPA fallback中间件在API控制器路由之前注册,所有未匹配到现有路由的请求都会被接管并返回初始HTML页面。确保Program.cs中的中间件顺序如下:

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

// 先注册API控制器路由,确保API请求优先匹配
app.MapControllers();

// 再注册Blazor相关的Hub和SPA fallback
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

2. 验证新增控制器的属性配置

确保新增的WeatherForecast2Controller和默认控制器的属性完全一致,尤其是路由和授权属性:

[ApiController]
[Route("api/[controller]")]
[Authorize] // 必须和WeatherForecastController保持相同的授权配置
public class WeatherForecast2Controller : ControllerBase
{
    // 复制默认控制器的实现代码
}

如果默认控制器有特定的Azure B2C授权策略(比如指定了[Authorize(Policy = "B2CPolicy")]),新增控制器也需要同步添加。

3. 排查Azure B2C权限配置

  • 登录Azure门户,检查你的B2C租户中,客户端应用是否已添加对新增API控制器对应的权限范围。如果默认控制器使用了access_as_user之类的自定义范围,需要确保新增API也关联了相同的范围,并且客户端应用已授予该权限。
  • 验证请求携带的访问令牌:使用JWT解析工具查看令牌的aud(受众)和scp(范围)是否匹配API的配置,令牌无效会导致请求被重定向到登录页面,返回HTML内容。

4. 确认请求路由匹配

  • 用浏览器开发者工具检查请求的URL是否正确(比如是否是/api/WeatherForecast2),避免拼写错误导致路由不匹配。
  • 可以临时添加路由诊断日志,确认请求是否匹配到了新增控制器:
app.UseRouting();
// 添加路由日志中间件
app.Use(async (context, next) =>
{
    var endpoint = context.GetEndpoint();
    if (endpoint != null)
    {
        Console.WriteLine($"匹配到的端点: {endpoint.DisplayName}");
    }
    await next();
});

如果日志显示请求匹配的是Blazor的SPA fallback端点,说明路由顺序或控制器配置有问题。

5. 配置API返回401而非重定向

当API请求未通过授权时,默认的认证中间件可能会重定向到Azure B2C登录页面,导致返回HTML。可以为API控制器配置自定义授权处理,直接返回401状态码:

builder.Services.AddControllers(options =>
{
    var authPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(authPolicy));
})
.AddAuthenticationJwtBearer(options =>
{
    // 配置JWT验证参数,确保和Azure B2C一致
    options.Authority = "https://your-b2c-tenant.b2clogin.com/your-tenant-id/your-policy/v2.0";
    options.Audience = "your-api-client-id";
});

这样未授权的API请求会返回401 JSON响应,而不是登录页面的HTML。

内容的提问来源于stack exchange,提问作者iCollect.it Ltd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:15:44