gpt4 book ai didi

asp.net - 带有 OData v4 的 Web Api 在 $select 上抛出异常

转载 作者:行者123 更新时间:2023-12-01 06:26:32 24 4
gpt4 key购买 nike

我正在使用最新版本的 WebApi 和 OData,一切都已设置为正常工作。唯一的问题是当我尝试使用 $select 时。

它在下面抛出错误

  Object of type 'System.Linq.EnumerableQuery`1[System.Web.OData.Query.Expressions.SelectExpandBinder+SelectAll`1[WebApplication1.Controllers.Person]]' cannot be converted to type 'System.Collections.Generic.IEnumerable`1[WebApplication1.Controllers.Person]'.

我查看了文档,他们的建议是使用 [Queryable]在 Controller 中的 Get 方法或 WebApiConfig 中使用 config.EnableQuerySupport这些都不是可用的选项。我目前正在使用 [EnableQuery]
编辑

数据 Controller :
    using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.OData;
using System.Xml.Serialization;

namespace WebApplication1.Controllers
{
public class PeopleController : ODataController
{
// GET api/values
[EnableQuery]
public IQueryable<Person> Get()
{
return new Person[] { new Person()
{
Id = 1,
FirstName = "Testing",
LastName = "2"
}, new Person()
{
Id = 2,
FirstName = "TestTest",
LastName = "3"
} }.AsQueryable();
}

// GET api/values/5
public Person Get(int id)
{
return new Person()
{
Id = 3,
FirstName = "Test",
LastName = "1"
};
}

// POST api/values
public void Post([FromBody]Person value)
{
}

// PUT api/values/5
public void Put(int id, [FromBody]Person value)
{
}

// DELETE api/values/5
public void Delete(int id)
{
}
}

public class Person
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}

WebApiConfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.OData;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using System.Web.OData.Formatter;
using WebApplication1.Controllers;

namespace WebApplication1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
config.MapHttpAttributeRoutes();

var odataFormatters = ODataMediaTypeFormatters.Create();
config.Formatters.InsertRange(0, odataFormatters);

ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("People");
config.AddODataQueryFilter();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "api",
model: builder.GetEdmModel());

}
}
}

更新 2

似乎只在以 xml 格式检索数据时抛出错误。 Json似乎工作

最佳答案

这是 System.Net.Formatting Nuget 包中 XmlMediaTypeFormatter 类的已知限制。 JSON 格式化程序的实现确实支持 $select 和 $expand 命令,但是当内容协商确定应该返回 XML 时,这些命令不可用。

如果您需要返回 XML 格式的响应,您应该考虑实现 OData 端点(而不是 WebAPI 端点)。可以在此处找到有关如何完成此操作的更多信息:

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

关于asp.net - 带有 OData v4 的 Web Api 在 $select 上抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com