ASP.NET WebAPI OData 406

我有一个相当简单的OData WebAPI服务工作的问题。 在〜/和〜/ $元数据的元数据查询之外,检查我自己的实体集合会返回一个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);
    }
}

作物型号:

public class Crop
{
    [Key]
    public int CropId { get; set; }
    [Required]
    public string Name { get; set; }
    public int MinCost { get; set; }
    public int DefaultCost { get; set; }
    public int MaxCost { get; set; }
}

CropsController(摘录):

public class CropsController : ODataController
{
    private ParadiseDataContext db = new ParadiseDataContext();

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

查询网址和结果:

家:

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)

项目文件:https://www.dropbox.com/s/5k62xl8bdfbzgq7/ParadiseBayDataService.zip?dl=0所有的二进制文件都被删除,所有的VSSO文件都被删除。 Nuget包配置应该还原依赖关系。


我找出了问题所在:

再次模型(现在是完整的代码)

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;

它按预期工作。 我确实看到了一个引用同一事物的链接。 只是这个问题的答案更像是“Use System.Web.OData”,没有太多上下文。 我遵循指南回到基础知识。 这个工作样本和我所拥有的只是这一行之间的一个主要区别。 路由不会给你太多的调试,看似在“EnableQuery”

链接地址: http://www.djcxy.com/p/20405.html

上一篇: ASP.NET WebAPI OData 406

下一篇: Type is not specified