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

.NET Core 3.0中Blazor Server调用MVC Controller API失败求助

解决Blazor Server无法读取MVC Controller API数据的问题

我仔细看了你的代码,发现几个关键问题,咱们一步步来排查修复:

1. 中间件配置顺序冲突

你的Startup.cs里同时使用了UseMvcWithDefaultRoute()和UseEndpoints(),这在ASP.NET Core 3.0+版本里会导致路由逻辑冲突——UseMvcWithDefaultRoute会直接终结路由流程,让后面的MapControllers、MapBlazorHub等端点映射无法正常工作。

修复方案:

直接移除app.UseMvcWithDefaultRoute();,因为你已经在UseEndpoints里配置了MapControllers(),完全可以处理API路由。修改后的Configure方法如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

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

    // 删掉这行,避免路由冲突
    // app.UseMvcWithDefaultRoute();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers(); // 处理API路由
        endpoints.MapBlazorHub(); // Blazor SignalR 连接
        endpoints.MapFallbackToPage("/_Host"); // Blazor 入口页
    });
}

2. HttpClient使用方式错误

在Blazor Server里绝对不要手动new HttpClient,手动创建的实例没有正确配置基地址,也不符合依赖注入的最佳实践,很容易导致请求失败。

修复步骤:

第一步:在Startup里注册HttpClient服务

在ConfigureServices方法中添加HttpClient的依赖注入配置:

services.AddScoped(sp => {
    var navigationManager = sp.GetRequiredService<NavigationManager>();
    return new HttpClient { BaseAddress = new Uri(navigationManager.BaseUri) };
});

第二步:在Razor页面中注入并使用HttpClient

修改你的Razor页面代码,通过@inject获取HttpClient,同时注意生命周期方法的版本问题(OnInitAsync是旧版方法,新版用OnInitializedAsync):

@inject HttpClient Http

@functions {
    IList<Study> studies = new List<Study>();

    protected override async Task OnInitializedAsync()
    {
        studies = await Http.GetFromJsonAsync<List<Study>>("/studies");
    }
}

3. 额外排查点

如果上面的修改后还是有问题,可以检查这几点:

  • 确保Study模型有公共无参构造函数,且所有需要序列化的属性都是public:
    public class Study
    {
        public Study() { }
        public int Id { get; set; }
        public string Title { get; set; }
        // 其他属性...
    }
    
  • 打开浏览器开发者工具(F12),查看网络请求中的/studies请求,看是否有404、500等错误状态码,根据错误信息进一步定位问题。
  • 确认StudyRepository.GetStudies()确实返回了有效的数据集合。

按上面的步骤调整后,你的Blazor应用应该就能正常读取API的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:10:48