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

如何将.NET Web API中OData API的路径默认设置为小写格式?

解决OData端点在Swagger中显示小写路径的方案

核心配置步骤

1. 开启全局路由小写配置

在ASP.NET Core的服务注册阶段,先开启系统路由的全局小写规则,该规则会作用于包括OData在内的所有路由:

builder.Services.Configure<RouteOptions>(options => 
{
    options.LowercaseUrls = true;
    // 可选配置:查询参数也统一为小写
    options.LowercaseQueryStrings = true;
});

2. 配置OData EDM模型使用小写实体集名

Swagger中显示的OData端点路径直接由EDM模型中定义的实体集名称决定,构建模型时将实体集名称设为小写即可:

单实体手动配置:

var modelBuilder = new ODataConventionModelBuilder();
// 直接指定小写的实体集名称
modelBuilder.EntitySet<你的实体类>("你的小写实体集名");

批量自动配置所有实体集为小写:

如果实体数量多,可以遍历自动生成小写实体集名称,不用逐个手动配置:

foreach (var structuralType in modelBuilder.StructuralTypes)
{
    if (structuralType is EntityTypeConfiguration entityConfig)
    {
        // 可根据自己的命名规则调整,例如类名小写加复数后缀
        string lowerEntitySetName = entityConfig.ClrType.Name.ToLowerInvariant() + "s";
        modelBuilder.AddEntitySet(lowerEntitySetName, entityConfig);
    }
}

3. 完整OData服务注册示例(.NET 6+ / OData 8.x版本)

builder.Services.AddControllers()
    .AddOData(options =>
    {
        var modelBuilder = new ODataConventionModelBuilder();
        // 上面的EDM模型配置写在这里
        var edmModel = modelBuilder.GetEdmModel();
        
        // 开启你需要的OData查询能力,因为你只用GET查询,按需开启即可
        options.Select().Filter().OrderBy().Expand().Count().SetMaxTop(100)
               .AddRouteComponents("odata", edmModel);
    });

// 要正确生成OData端点的Swagger文档,需要安装NuGet包:Swashbuckle.AspNetCore.SwaggerGen.OData
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

旧版本适配(OData 7.x)

如果使用的是OData 7.x版本,添加如下配置即可:

public static void Register(HttpConfiguration config)
{
    // 开启小写驼峰命名规则
    config.EnableLowerCamelCase();
    // 构建EDM时同样指定小写实体集名
    var builder = new ODataConventionModelBuilder();
    builder.EntitySet<你的实体类>("你的小写实体集名");
    // 注册OData路由
    config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: "odata",
        model: builder.GetEdmModel());
}

注意事项

  • 如果你在OData Controller上手动加了[Route]属性,需要确保路由模板为小写,手动配置的优先级高于全局规则
  • 配置完成后清理Swagger缓存或浏览器缓存,避免旧的大写路径残留
  • 配置完成后Swagger中显示的路径会和实际可访问的小写路径完全一致,不会再出现大小写不匹配的问题

内容的提问来源于stack exchange,提问作者Nathan van Jole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:30:04