如何修改.NET OData的路由名称以移除URL中的/odata前缀
配置修改方案
根据你使用的.NET版本不同,修改对应位置的OData路由前缀配置即可:
.NET 6+ 版本(.NET 6/7/8)
修改Program.cs文件中的OData路由注册逻辑,将MapODataRoute方法的第二个参数(路由前缀配置)从默认的"odata"改为空字符串:
// 原来的配置 // app.MapODataRoute("odataRouteName", "odata", GetEdmModel()); // 修改后的配置 app.MapODataRoute("odataRouteName", "", GetEdmModel());
如果你的项目没有显式调用MapODataRoute,而是在AddOData时配置路由规则,调整为如下写法即可:
builder.Services.AddControllers() .AddOData(opt => { opt.SetEdmModel(GetEdmModel()) .Select().Filter().OrderBy().Expand().Count() // 配置路由前缀为空 .RouteOptions = new ODataRouteOptions { EnableKeyAsSegment = true }; }); app.MapControllers();
.NET Core 3.1 / .NET 5 版本
修改Startup.cs中Configure方法的端点注册逻辑:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其余中间件配置保持不变 app.UseEndpoints(endpoints => { // 原来的配置 // endpoints.MapODataRoute("odataRouteName", "odata", GetEdmModel()); // 修改后的配置,第二个参数设为空字符串 endpoints.MapODataRoute("odataRouteName", "", GetEdmModel()); endpoints.MapControllers(); }); }
验证与注意事项
- 配置修改完成后,访问
{你的服务地址}/$metadata,如果能正常返回OData元数据文档,说明路由配置生效 - 如果你在OData控制器上使用了
[ODataRoutePrefix]特性,需要删除特性值里的odata/前缀,比如把[ODataRoutePrefix("odata/Products")]改为[ODataRoutePrefix("Products")] - 确保没有其他普通WebAPI控制器的路由和OData实体路由冲突,若存在冲突可以给OData控制器单独配置全局前缀,或者调整路由注册顺序
内容的提问来源于stack exchange,提问作者EvaHHHH
相关产品推荐
相关产品推荐

