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

如何在Blazor项目中调用Razor类库(RCL)内定义的Controller接口

问题根因

你遇到的报错本质是HttpClient实例配置错误导致,和控制器定义、端点映射没有直接关联:手动实例化的HttpClient没有设置请求基准地址,无法完成相对路径的地址解析。

解决方案

按以下步骤调整即可:

  1. 调整HttpClient的使用方式
    不要手动new HttpClient,Blazor应用支持直接注入已经配置好基准地址的HttpClient实例:
    首先在Razor组件顶部添加注入声明:
@inject HttpClient Http
@* 如果是Blazor Server还需要注入NavigationManager辅助配置,WebAssembly可忽略 *@
@inject NavigationManager NavManager

接口调用代码修改为:

string uri = $"Data/LetsBreakIt";
try
{
    ssiList = await Http.GetFromJsonAsync<List<string>>(uri);
}
catch (Exception ex)
{
    // 自行补充异常处理逻辑
}

如果注入时提示HttpClient服务未注册,在主项目Startup.cs的ConfigureServices方法中补充注册逻辑:

// Blazor WebAssembly 直接添加即可
services.AddHttpClient();

// Blazor Server 需要额外指定BaseAddress
services.AddScoped<HttpClient>(sp => 
{
    var navManager = sp.GetRequiredService<NavigationManager>();
    return new HttpClient { BaseAddress = new Uri(navManager.BaseUri) };
});
  1. 确保RCL控制器被主项目扫描
    如果调整HttpClient后调用返回404,说明主项目未识别到RCL中定义的控制器,需要补充程序集扫描配置,修改ConfigureServices中的控制器注册代码:
services.AddControllers()
    // 替换DataController为你RCL内定义的控制器类型,用于指定扫描的程序集
    .AddApplicationPart(typeof(DataController).Assembly);

你现有的端点映射配置已经包含endpoints.MapControllers(),无需额外修改。

  1. 控制器有效性验证
    你可以直接在浏览器地址栏输入{你的应用访问根地址}/Data/LetsBreakIt,如果能正常返回JSON数据,说明控制器的路由、注册逻辑均正常,仅需要调整前端调用逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:54:00