在Postman调用OData API返回406 Not Acceptable错误:返回对象失败
解决OData返回自定义对象时的406 Not Acceptable错误
406错误的核心原因是:OData无法识别你的自定义MyClass类型,导致无法生成符合客户端请求Accept头的响应格式。返回字符串时WebAPI能直接返回文本格式,所以没有问题,但自定义对象需要OData的EDM(Entity Data Model)模型支持才能正确序列化。
解决方案步骤
配置OData EDM模型
在WebApiConfig中注册你的自定义类型,让OData知道如何处理它:using System.Web.Http; using Microsoft.AspNet.OData.Builder; using Microsoft.AspNet.OData.Extensions; using APIDemo.Controllers; namespace APIDemo { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 构建EDM模型 ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); // 注册MyClass为实体集,实体集名称需与控制器名称匹配(控制器名=实体集名+Controller) builder.EntitySet<MyClass>("Myapitest"); // 注册OData路由 config.MapODataServiceRoute( routeName: "ODataRoute", routePrefix: null, model: builder.GetEdmModel()); // 启用属性路由 config.MapHttpAttributeRoutes(); } } }调整控制器方法(可选但推荐)
让Get方法符合OData规范,便于OData正确处理响应格式:[HttpGet] [EnableQuery] // 启用OData查询支持 public IHttpActionResult Get() { var myclass = new MyClass() { Name = "Someone" }; return Ok(myclass); }检查请求头
确保Postman的请求Accept头是OData支持的格式,比如:application/json;odata.metadata=minimalapplication/jsonapplication/atom+xml
关键说明
OData依赖EDM模型来序列化/反序列化实体,没有模型配置时,OData无法解析你的自定义类型,自然无法生成客户端期望的响应格式,触发406错误。返回字符串时WebAPI绕过了OData的序列化逻辑,直接返回文本,所以不会报错。
内容的提问来源于stack exchange,提问作者user20377051
相关产品推荐
相关产品推荐

