从 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你想要什么。谢谢
我正在寻找一种将 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你想要什么。谢谢