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

C#项目中存储共享API路由的最优实现方案是什么?

共享API路由实现方案优化建议

你当前的实现已经具备编译期校验、无运行时开销、结构清晰的优势,完全可以满足绝大多数中小型项目的需求。如果需要适配更复杂的场景,可以参考以下优化方向:

1. 补充路径参数支持

现有实现仅覆盖了无参数的固定路由,遇到带路径参数的端点(如/api/v1/users/{userId})时,可以同时保留常量模板和动态拼接能力:

public static class Users
{
    private const string Controller = $"{Base}{nameof(Users)}{Slash}";
    public const string List = $"{Controller}{nameof(List)}";
    public const string Register = $"{Controller}{nameof(Register)}";
    
    // 常量模板可直接用于控制器属性路由、Swagger生成
    public const string GetByIdTemplate = $"{Controller}{{UserId}}";
    // 动态拼接方法供客户端调用时使用
    public static string GetById(Guid userId) => $"{Controller}{userId}";
}

2. 支持多API版本适配

如果你的API需要多版本共存,可以将版本号从硬编码常量调整为可配置参数,同时保留路由结构的复用性:

public static class RouteProvider
{
    private const string Slash = "/";
    private const string Prefix = $"api{Slash}";

    public static string GetBaseRoute(string version = "v1") => $"{Prefix}{version}{Slash}";

    public static class Users
    {
        public static string GetControllerBase(string version = "v1") 
            => $"{GetBaseRoute(version)}{nameof(Users)}{Slash}";
        
        public static string GetListRoute(string version = "v1") 
            => $"{GetControllerBase(version)}{nameof(List)}";

        public static string GetRegisterRoute(string version = "v1") 
            => $"{GetControllerBase(version)}{nameof(Register)}";
    }
}

3. 与ASP.NET Core端点映射联动

针对ASP.NET Core项目,可以编写扩展方法直接绑定路由与端点实现,避免在控制器上重复声明路由属性,减少冗余代码:

public static class UserEndpointRouteExtensions
{
    public static IEndpointRouteBuilder MapUserApiEndpoints(this IEndpointRouteBuilder app)
    {
        var userRouteGroup = app.MapGroup(Routes.Users.Controller);
        // 绑定用户列表端点
        userRouteGroup.MapGet(Routes.Users.List, async (IUserService userService) => 
            Results.Ok(await userService.GetUserListAsync()));
        // 绑定用户注册端点
        userRouteGroup.MapPost(Routes.Users.Register, async (RegisterUserRequest request, IUserService userService) =>
        {
            var result = await userService.RegisterAsync(request);
            return result.IsSuccess ? Results.Ok(result.Data) : Results.BadRequest(result.ErrorMsg);
        });
        return app;
    }
}

使用时仅需在Program.cs中调用app.MapUserApiEndpoints()即可完成所有用户相关端点的注册。

额外说明

  • 项目规模较小的情况下不需要过度设计,你当前的实现已经是最优解
  • 常量路由的实现方式完全兼容Swagger/OpenAPI生成,无需额外适配
  • 如果需要和前端.NET项目(如Blazor WASM)共享路由,可将该类库编译为.NET Standard版本直接引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:03