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

Blazor Server应用调用Controller Get接口返回无效JSON问题咨询

问题原因及解决方案

你遇到的请求未命中Controller、返回HTML内容的问题,是Blazor Server项目集成ApiController时的常见问题,核心原因和解决方法如下:


核心原因

1. 路由中间件顺序错误

Blazor Server默认配置了回退路由(Fallback Route),所有未匹配到已有路由的请求都会被该路由拦截,返回Blazor应用的首页HTML内容,也就是你看到的以<开头的响应。如果你的中间件配置中,MapControllers()放在了Blazor相关路由映射(MapBlazorHub()、MapFallbackToPage())的后面,Controller的路由永远不会被匹配,请求都会被Blazor的回退路由处理。

2. 未注册Controller路由

默认的Blazor Server项目模板生成的启动代码中,不会主动添加Controller路由映射,如果你没有手动在中间件配置中添加app.MapControllers(),Controller的所有路由都不会生效。

3. 请求地址配置错误

你在服务中硬编码了请求地址https://localhost:44391/systemusers/get,如果当前Blazor应用启动的端口不是44391,或者站点部署后域名变化,就会请求到错误的地址,返回其他站点的HTML内容。

4. 身份验证拦截

如果项目配置了全局身份验证规则,请求Api接口时没有携带有效的身份凭证,会被中间件重定向到登录页面,返回的登录页内容也是HTML格式。


解决步骤

  1. 修正中间件顺序,确保Controller路由映射在Blazor路由之前,.NET 6之前的Startup.csConfigure方法示例配置如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其他中间件省略
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    // 优先映射Controller路由
    app.MapControllers();

    // 再映射Blazor相关路由
    app.MapBlazorHub();
    app.MapFallbackToPage("/_Host");
}

如果是.NET 6+的顶层语句Program.cs,配置逻辑完全一致。

  1. 避免硬编码请求地址,将SystemUsersService中的请求地址改为相对路径,自动适配当前站点的域名和端口:
var url = "/systemusers/get";
  1. 排除身份验证拦截影响,可暂时给GetAll接口添加[AllowAnonymous]属性,测试接口是否能正常命中。

  2. 若仍未解决,可开启ASP.NET Core路由日志,观察请求的路由匹配过程,确认请求最终命中的路由规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:03