Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi oData返回406_C#_Asp.net Web Api_Asp.net Mvc 5_Odata - Fatal编程技术网

C# WebApi oData返回406

C# WebApi oData返回406,c#,asp.net-web-api,asp.net-mvc-5,odata,C#,Asp.net Web Api,Asp.net Mvc 5,Odata,用这个把我的头撞到墙上。我有一个oDataController,它返回一个视图模型实体,但每次调用它时,都会得到一个406客户端。 使用Web API 2在.Net MVC 5 oData v4中构建此功能 当我一步一步地浏览代码时,我可以看到当我的函数被点击时,路由正在工作。我还可以毫无疑问地获得$metadata 我已经检查了返回值(IQueryable)是否在服务器端有效,并且确实返回了结果,因此在我的函数退出之后以及客户端(邮递员)接收到响应之前发生了一些事情 我所看到的所有与406相关

用这个把我的头撞到墙上。我有一个oDataController,它返回一个视图模型实体,但每次调用它时,都会得到一个406客户端。 使用Web API 2在.Net MVC 5 oData v4中构建此功能

当我一步一步地浏览代码时,我可以看到当我的函数被点击时,路由正在工作。我还可以毫无疑问地获得$metadata

我已经检查了返回值(IQueryable)是否在服务器端有效,并且确实返回了结果,因此在我的函数退出之后以及客户端(邮递员)接收到响应之前发生了一些事情

我所看到的所有与406相关的线程似乎都表明这是一个路由问题,但我的线程不能,因为函数正在被命中


有什么想法吗?

所以我想我已经找到了问题所在,回到了基础,并设法使web api和odata控制器都能很好地工作。为了方便其他人,我首先添加了一个oData控制器,并确保它能够独立工作。然后我添加了一个同名的WebAPI控制器(有意)。在本例中,odata起作用,但到api控制器的路由没有起作用(api调用路由到odata控制器,后者返回406)。然后,我向这两个控制器添加了RoutePrefix属性,然后这两个控制器都工作了。
然后,我尝试在应用程序中添加一点复杂性,以复制我在另一个项目中拥有的东西,即控制器继承,这就是它失败的地方。如果您想知道我为什么使用控制器继承,那是因为我有接受类型参数的泛型控制器(我知道这是一个专门的用例)。无论哪种方式,都是继承混淆了路由/响应,即使它正确地路由到我的应用程序中的正确端点(因为我有一个自定义的ApiSelector实现)。

因此我认为我已经发现了问题,回到了基础,并设法使web api和odata控制器都能很好地工作。为了方便其他人,我首先添加了一个oData控制器,并确保它能够独立工作。然后我添加了一个同名的WebAPI控制器(有意)。在本例中,odata起作用,但到api控制器的路由没有起作用(api调用路由到odata控制器,后者返回406)。然后,我向这两个控制器添加了RoutePrefix属性,然后这两个控制器都工作了。
然后,我尝试在应用程序中添加一点复杂性,以复制我在另一个项目中拥有的东西,即控制器继承,这就是它失败的地方。如果您想知道我为什么使用控制器继承,那是因为我有接受类型参数的泛型控制器(我知道这是一个专门的用例)。无论哪种方式,都是继承混淆了路由/响应,即使它正确地路由到我的应用程序中的正确端点(因为我有一个自定义ApiSelector实现)。

对我来说,问题是我返回的实体没有映射到映射到“GetEdmModel”edmModel的模型,即,调用后返回的数据未正确映射到资源模型

PS:当我从ApicController而不是ODataController继承时,它工作得很好。 因此,我也有同样的困惑,为什么它有406错误时,路线正确击中


希望,这有帮助。这是我面临的问题。

对我来说,问题是我返回的实体没有映射到映射到“GetEdmModel”edmModel的模型,即调用后返回的数据没有正确映射到资源模型

PS:当我从ApicController而不是ODataController继承时,它工作得很好。 因此,我也有同样的困惑,为什么它有406错误时,路线正确击中


希望,这有帮助。这是我面临的问题。

我有一个类似的实现,其中我有一个基类,继承了
ODataController
,使用get方法,如:

public IHttpActionResult Get()
{
    Verify();
    return Ok(GetDataInstance());
}

其中,
GetDataInstance
是一个返回
IQueryable
的虚拟方法。我可以通过将
GetDataInstance()
更改为返回
IQueryable

来消除406错误,我有一个类似的实现,其中我有一个基类继承了
ODataController
,带有一个get方法,如:

public IHttpActionResult Get()
{
    Verify();
    return Ok(GetDataInstance());
}

其中,
GetDataInstance
是一个返回
IQueryable
的虚拟方法。我可以通过将
GetDataInstance()
更改为返回
IQueryable

来消除406错误。您了解了406错误吗?您在请求中没有提到任何关于accept头的内容,这正是406所指的。是的,我检查了这个,从人们所说的,他们似乎推断你的浏览器应该尝试呈现出来,不管你是否包括它。MVC应该返回json或xml。我在Accept标题中添加了各种内容类型,您可以从oData获得这些内容类型,但由于没有这些内容类型,您是否阅读了406个错误?您在请求中没有提到任何关于accept头的内容,这正是406所指的。是的,我检查了这个,从人们所说的,他们似乎推断你的浏览器应该尝试呈现出来,不管你是否包括它。MVC应该返回json或xml。我在Accept标题中添加了各种内容类型,您可以从oData获得这些内容类型,但没有效果