C# Visual studio中的OData服务出现406错误
我正试图弄明白为什么我的odata服务无法正常工作,但毫无用处。我一直收到一个406错误,我尝试了所有推荐的解决方案,但都没有效果。下面是我的代码C# Visual studio中的OData服务出现406错误,c#,asp.net-mvc,web,asp.net-web-api,odata,C#,Asp.net Mvc,Web,Asp.net Web Api,Odata,我正试图弄明白为什么我的odata服务无法正常工作,但毫无用处。我一直收到一个406错误,我尝试了所有推荐的解决方案,但都没有效果。下面是我的代码 public class Person { public int Id { get; set; } } public class TestController : ODataController { [EnableQuery] public IQueryable<Person> GetTest() { try
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;
}
公共类人物
{
公共int Id{get;set;}
}
公共类TestController:ODataController
{
[启用查询]
公共IQueryable GetTest()
{
尝试
{
var persons=new List(){new persons{Id=1}};
返回人员。AsQueryable();
}
捕获(例外情况除外)
{
var here=“dd”;
}
返回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;
//Web API路由
config.maphttpAttribute路由();
var builder=新的ODataConventionModelBuilder();
建造商实体集(“人”);
config.MapODataServiceRoute(“odata”,“odata”,builder.GetEdmModel());
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Always;
它一直失败,出现406错误。它击中了控制器中的断点,但没有返回数据。我解决了问题。我使用的是
config.MapODataServiceRoute(…
而不是config.Routes.MapODataServiceRoute…
一旦我更改了它,并且有了正确的使用语句,一切都开始工作。在哪一行出现异常?您是否尝试过[Queryable]
而不是[EnableQuery]
attribute?代码中没有任何异常,只有fiddler或任何客户端出现406错误。@JotaBe,它不是重复的。Queryable已弃用,不起作用。您使用的是哪个版本?您是否尝试过使用VS默认支架创建应用程序的“教程版本”,并检查它是否起作用?(教程版本:创建EF模型,添加OData包,使用VS脚手架)这可能是CORS问题吗?您是否尝试过“接受=*/*”您的请求中的标题?能否将Fiddler或console捕获的所有请求标题显示给Odata服务?我解决了问题,希望这对其他人有所帮助。我使用的是config.MapODataServiceRoute(…而不是config.Routes.MapODataServiceRoute…只要我更改了它,并使用了正确的using语句,一切都开始工作了。谢谢大家的帮助!!