Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# ASP.NET WebAPI OData 406_C#_Asp.net_Asp.net Web Api_Odata - Fatal编程技术网

C# ASP.NET WebAPI OData 406

C# ASP.NET WebAPI OData 406,c#,asp.net,asp.net-web-api,odata,C#,Asp.net,Asp.net Web Api,Odata,让一个相当简单的ODataWebAPI服务工作起来,我遇到了一个问题。在~/和~/$metadata上的元数据查询之外,检查我自己的实体集将返回406。当调试控制器(见下文)时,GET请求被路由通过,查询数据库并实际返回数据。然而,之后仍然生成406 预期的响应是一个格式正确的JSON响应字符串,显示查询~/Crops时的所有数据行 请注意,其中一些对我来说仍然是黑魔法,所以请随时详细说明任何回答。这是接线图: Global.asax public class WebApiApplication

让一个相当简单的ODataWebAPI服务工作起来,我遇到了一个问题。在~/和~/$metadata上的元数据查询之外,检查我自己的实体集将返回406。当调试控制器(见下文)时,GET请求被路由通过,查询数据库并实际返回数据。然而,之后仍然生成406

预期的响应是一个格式正确的JSON响应字符串,显示查询~/Crops时的所有数据行

请注意,其中一些对我来说仍然是黑魔法,所以请随时详细说明任何回答。这是接线图:

Global.asax

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}
WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.AddODataQueryFilter();
        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Crop>("Crops");
        var model = builder.GetEdmModel();

        config.MapODataServiceRoute(
            routeName: "odata",
            routePrefix: null,
            model: model);
    }
}
作物控制员(节选):

询问作物

http://localhost:39086/Crops
406 - Not Accepted (Empty Body)
项目文件:
所有二进制文件都已删除,所有VSSO引用都已删除。Nuget软件包配置应恢复依赖项。

我发现了问题所在:

同样是模型(现在是完整代码)

当我将此更改为:

using System.Web.OData;

它按预期工作。我确实看到了一个引用相同内容的链接。这个问题的答案更像是“使用System.Web.OData”,没有太多上下文。我是按照指南回到基本知识上来的。工作样本和我所拥有的一个主要区别是这一行。通过调试,路由并没有给您提供太多的东西,关键似乎在于“EnableQuery”

我以最基本的方式查询它(除此之外没有其他内容)。使用~/Crops进行查询可以让我在代码的GetCrops部分找到断点。我验证了db.Crops实际上是通过结果查看器返回数据的。406上的可能重复和更多信息上面的两个线程似乎都不适用于我的情况:第一个线程似乎指的是某些丢失的路由。我认为它使用的是不同版本的OData,因为答案中显示的设置不可用。使用其他项修改代码不会产生不同的结果。Marvin的线程表明客户端除了application/json之外没有其他功能:我在fiddler上创建了下面的accept头来测试:accept:text/html、application/xhtml+xml、application/xml、application/json、text/plain;q=0.9;image/webp,/;q=0.8;同样的结果,除了您提到的odata路由前缀“odata”之外,您列出的所有内容在我看来都很好,但没有在代码中使用。然而,这并不是根本原因。你能和我分享一个回购项目吗(控制台应用程序还可以)?很高兴你解决了这个问题,但这不是我的问题,我使用的是System.Web.OData;到处都是(我在执行自定义操作时收到了406。我从ODataController返回到客户端的对象与我在创建模型时在操作的.Returns中指定的类型不同。
http://localhost:39086/
{
  "@odata.context":"http://localhost:39086/$metadata","value":[
    {
      "name":"Crops","kind":"EntitySet","url":"Crops"
    }
  ]
}
http://localhost:39086/Crops
406 - Not Accepted (Empty Body)
using System.Data;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.OData;
using ParadiseBayDataService.Models;

namespace ParadiseBayDataService.Controllers
{
    [EnableQuery]
    public class CropsController : ODataController

    {
        private ParadiseDataContext db = new ParadiseDataContext();

        // GET: odata/Crops
        [EnableQuery]
        public IQueryable<Crop> GetCrops()
        {
            return db.Crops;
        }
using System.Web.Http.OData;
using System.Web.OData;