我正在努力将OData v4查询支持添加到一个继承自ApiController而不是ODataController的控制器方法中。虽然我在解决方案中有一个工作的OData模型,但有一些端点并不真正属于该模型,但查询的强大功能会很有用。
我看到一些文章建议我只需返回IQueryable并使用EnableQuery即可。
这是我的示例代码:
public class TestController : ApiController
{
[HttpGet]
[EnableQuery]
public IQueryable<TestObject> Events()
{
var result = new[] { new TestObject { Id = "1" } }.AsQueryable();
return result;
}
}
public class TestObject
{
public string Id { get; set; }
}
当我调用/Test/Events时,只返回了一个406 Not Acceptable,我在处理OData时经常遇到这种情况,通常意味着我返回了OData框架不喜欢的内容。我以前从未能够从框架中获取更多信息(我认为这是一个重大缺陷),只能通过试验和错误来解决问题。
有人成功配置过吗?如果是,请分享一下经验?
或者,有什么关于调试406响应的建议?
编辑:
好吧,事实证明罪魁祸首是启动中注册自定义ODataMediaTypeFormatter的一些代码,在此过程中清除了所有其他格式化程序。
删除有问题的代码后,它就工作了。
真的希望WebApi在输出406错误时能够记录产生错误的原因。