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

如何在ASP.NET中使用Fast Endpoints实现GET请求?

解决Fast Endpoints中GET请求Swagger生成请求体的问题

问题根源在于Fast Endpoints默认会将泛型Endpoint<TRequest, TResponse>中的TRequest作为请求体绑定,而HTTP规范中GET/HEAD请求不应携带请求体,这导致Swagger生成了不符合规范的请求结构,最终触发浏览器fetch API的错误。

针对你的场景,分两种情况修正:


1. 无查询参数的场景

直接将请求类型替换为Fast Endpoints提供的EmptyRequest,这样框架就不会生成请求体:

using api.Blogs.Shared;
using api.Data;
using AutoMapper;
using FastEndpoints;
using Microsoft.EntityFrameworkCore;

namespace api.Blogs.ListBlogsEndpoint;
public class ListBlogsEndpoint(BlogDbContext context, AutoMapper.IMapper mapper) : Endpoint<EmptyRequest, BlogResponse[]>
{
    public override void Configure()
    {
        Get("blogs");
    }

    public override async Task HandleAsync(EmptyRequest req, CancellationToken ct)
    {
        var blogs = await context.Blogs.ToArrayAsync(ct);
        var response = blogs.Select(b => mapper.Map<BlogResponse>(b)).ToArray();

        await SendOkAsync(response, ct);
    }
}

2. 需要查询参数的场景(如分页、筛选)

如果你的ListBlogsRequest是用来接收查询参数的,需要给类的属性标记[QueryParam],并在配置中显式允许查询参数绑定:

首先修改请求类:

using FastEndpoints;

public class ListBlogsRequest
{
    [QueryParam]
    public int? Page { get; set; }

    [QueryParam]
    public int? PageSize { get; set; }

    [QueryParam]
    public string? SearchKeyword { get; set; }
}

然后更新Endpoint配置:

public override void Configure()
{
    Get("blogs");
    AllowQueryParams(); // 显式声明使用查询参数绑定
}

这样Fast Endpoints会自动将请求参数解析为URL查询参数,Swagger也会生成对应的查询参数输入框,而非请求体,完全符合HTTP规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:10:56