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

如何在FastEndpoints中使用IRouteConstraint?迁移时复用现有实现类

在FastEndpoints中复用IRouteConstraint实现类(Hashids解析)

1. 注册约束类与映射别名

首先在Program.cs中完成两步配置:

  • 将你的自定义约束类注册到服务容器:
    builder.Services.AddSingleton<IRouteConstraint, HashIdRouteConstraint>();
    
  • 为约束配置路由别名(方便在路由模板中引用):
    builder.Services.Configure<RouteOptions>(opts =>
    {
        opts.ConstraintMap.Add("hashid", typeof(HashIdRouteConstraint));
    });
    

2. 在端点中使用约束

有两种方式可以在FastEndpoints中应用你的Hashid约束:

方式一:通过路由属性指定

直接在端点类的HttpGet/HttpPost等属性中使用别名:

public class GetUserEndpoint : EndpointWithoutRequest<UserResponse>
{
    [HttpGet("/users/{userId:hashid}")]
    public override async Task HandleAsync(CancellationToken ct)
    {
        // userId参数已被约束解析为实际ID
        var userId = Route<int>("userId");
        // 后续业务逻辑
    }
}

方式二:通过端点配置方法指定

如果偏好代码配置而非属性,可以在Configure方法中为路由参数绑定约束:

public class GetUserEndpoint : EndpointWithoutRequest<UserResponse>
{
    public override void Configure()
    {
        Get("/users/{userId}");
        RouteConstraint("userId", typeof(HashIdRouteConstraint));
    }

    public override async Task HandleAsync(CancellationToken ct)
    {
        var userId = Route<int>("userId");
        // 后续业务逻辑
    }
}

3. 注意事项

  • 确保你的HashIdRouteConstraint类的Match方法逻辑正确,能将Hashid字符串解析为目标类型(如int、long),并返回匹配结果。
  • 如果约束类需要依赖其他服务(比如Hashids的加密密钥配置),需提前将这些依赖注册到容器,确保约束类构造函数能正确注入依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:02:35