从 OData 控制器返回后如何修复错误 406

How to fix error 406 after returning from OData controller

我正在寻找一种将 OData 控制器与 ASP.NET MVC4 Web.API

一起使用的方法

路由在应用程序开始使用中注册

using Microsoft.Data.Edm;
using System.Web.Http;
using System.Web.Http.OData.Builder;
public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapODataRoute("odata", "api", GetEdmModel());
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
            config.Formatters.Remove(config.Formatters.XmlFormatter);
        }

        static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            return builder.GetEdmModel();

        }
 }}

OData 控制器:

using System.Web.Http;
using System.Web.Http.OData;
using System.Web.Http.OData.Query;
using System.Collections;

public class ODController : ODataController
{

    public class Poco
    {
        public int id { get; set; }
        public string name { get; set; }
        public string type { get; set; }
    }

    public IEnumerable Get(ODataQueryOptions queryOptions)
    {
        return new Poco[] {
    new Poco() { id = 1, name = "one", type = "a" },
    new Poco() { id = 2, name = "two", type = "b" },
    new Poco() { id = 3, name = "three", type = "c" }
};
    }

访问urlhttp://localhost:52216/admin/API/ODreturns406不接受错误。 调试器显示控制器被击中。从控制器返回后发生错误。 如何解决此问题,以便 OData 控制器可以在 MVC4 中的 Web API 中使用?

我认为您混合了 webapi 和 webapi for odata。最好先读到samples and tutorials

从你提到的,我不明白你为什么期望 OData 可以序列化基于一个空 Edm 模型的飞行 POCO 列表。

请试试这个:

使用您的 POCO class 构建模型

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Poco>("Do");
return builder.GetEdmModel();

确保控制器 class 命名约定。应该是[EntitySetName] + "Controller"

删除 Web API 路由。

config.Routes.MapHttpRoute(..);

然后,请求Uri应该return你想要什么。谢谢