我有一个问题,无法让一个相当简单的OData WebAPI服务正常工作。除了在~/和~/$metadata上进行元数据查询外,检查自己的实体集返回406。在调试控制器(见下文)时,GET请求被路由,数据库被查询并且实际返回数据。然而,在此之后仍会生成406错误。
期望的响应是一个正确格式化的JSON响应字符串,显示查询~/Crops时所有数据行。
请注意,其中一些对我来说仍然是黑魔法,所以请随意详细说明任何响应。这是连线:
Global.asax
CropsController(摘录):
期望的响应是一个正确格式化的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;
}
查询URL和结果:
首页:
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包配置应恢复依赖项。