【发布时间】:2018-06-15 18:46:28
【问题描述】:
我试图弄清楚为什么我的 odata 服务无法正常工作。我不断收到 406 错误,我尝试了所有推荐的解决方案都无济于事。下面是我的代码。
public class Person
{
public int Id { get; set; }
}
public class TestController : ODataController
{
[EnableQuery]
public IQueryable<Person> GetTest()
{
try
{
var persons = new List<Person>(){new Person{ Id= 1}};
return persons.AsQueryable();
}
catch (Exception ex)
{
var here = "dd";
}
return null;
}
在我的 webapiconfig 类中,我有:
// Web API routes
config.MapHttpAttributeRoutes();
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("Person");
config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
它一直失败并出现 406 错误。它在我的控制器中命中断点,但不返回数据。
【问题讨论】:
-
您在哪一行得到异常?
-
你试过
[Queryable]而不是[EnableQuery]属性吗? -
我没有在代码中得到任何异常,只是在提琴手或任何客户端上出现 406 错误。 @JotaBe,它不是重复的。 Queryable 已弃用且无法正常工作。
-
您使用的是哪个版本?您是否尝试过使用 VS 默认脚手架创建应用程序的“教程版本”并检查它是否有效? (教程版:创建 EF 模型,添加 OData 包,使用 VS 脚手架)会不会是 CORS 问题?您是否在请求中尝试过“Accept=*/*”标头?您能否显示 Fiddler 或控制台捕获的对 Odata 服务的请求的所有标头?
-
我找到了问题所在,我希望这对其他人有所帮助。我使用的是 config.MapODataServiceRoute(... 而不是 config.Routes.MapODataServiceRoute... 一旦我更改了它,并且使用了正确的 using 语句,一切都开始工作了。感谢你们所有的帮助!!
标签: c# asp.net-mvc web asp.net-web-api odata