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

.NET 8 Blazor中如何用GetFromJsonAsAsyncEnumerable传请求对象?

.NET 8 Blazor Web App 传递复杂请求对象到GetFromJsonAsAsyncEnumerable的实现方案

因为GetFromJsonAsAsyncEnumerable本身不直接支持带JSON体的GET请求,而你的场景又无法拆分请求参数到QueryString,这里提供一种基于HttpClient.SendAsync结合FastEndpoints配置的可行方案:

1. Blazor客户端实现

通过手动构建带JSON体的GET请求,再将响应内容转为异步枚举:

// 注入的HttpClient实例
[Inject] private HttpClient HttpClient { get; set; } = default!;

public async Task LoadAgencyListAsync(GetAgencyListRequest request)
{
    // 序列化请求对象为JSON内容
    var requestContent = JsonContent.Create(request);
    
    // 构建带Body的GET请求
    var httpRequest = new HttpRequestMessage(HttpMethod.Get, "/api/agencies/list")
    {
        Content = requestContent
    };

    // 发送请求并获取响应(启用流式处理)
    using var response = await HttpClient.SendAsync(
        httpRequest, 
        HttpCompletionOption.ResponseHeadersRead, 
        CancellationToken.None);
    
    response.EnsureSuccessStatusCode();

    // 将响应转为异步枚举
    var agencyEnumerable = await response.Content.ReadFromJsonAsAsyncEnumerable<AgencyDto>();
    
    // 遍历处理流式返回的数据
    await foreach (var agency in agencyEnumerable)
    {
        // 示例:添加到本地绑定集合
        AgencyList.Add(agency);
    }
}

2. FastEndpoints服务端配置

默认FastEndpoints会拦截带Body的GET请求,需要在对应Endpoint配置中显式允许:

public class GetAgencyListEndpoint : Endpoint<GetAgencyListRequest, IAsyncEnumerable<AgencyDto>>
{
    public override void Configure()
    {
        Get("/api/agencies/list");
        // 关键配置:允许GET请求携带请求体
        AllowRequestBodyForHttpGet();
    }

    public override async Task HandleAsync(GetAgencyListRequest req, CancellationToken ct)
    {
        // 业务逻辑:从数据库或其他数据源获取流式结果
        var agencyStream = await _agencyRepository.GetAgencyStreamAsync(req, ct);
        
        // 返回异步枚举
        await SendAsync(agencyStream, cancellation: ct);
    }
}

注意事项

  • HTTP规范虽不推荐GET请求带Body,但现代浏览器、HttpClient及FastEndpoints均支持该场景
  • 此方案既保留了ReadFromJsonAsAsyncEnumerable的流式处理优势(适合大数据量返回),又能完整传递复杂请求对象
  • 无需拆分复杂请求参数到QueryString,避免了参数拼接的繁琐和长度限制问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:07:36