我正在寻找一种在ASP.NET MVC4 Web上使用OData控制器的方法.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" }
};
}
访问网址http://localhost:52216/admin/API/OD会返回406不接受错误。 调试器显示控制器被命中。从控制器返回后发生错误。 Hwo要解决这个问题,以便OData控制器可以在MVC4中的Web API中使用吗?
答案 0 :(得分:1)
我认为你将webapi和webapi混合用于odata。最好先阅读samples and tutorials。
根据您的提及,我无法理解为什么您希望OData能够根据一个空的Edm模型序列化一个飞行POCO列表。
请试试这个:
使用您的POCO类来构建模型
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Poco>("Do");
return builder.GetEdmModel();
确保控制器类命名约定。它应该是[EntitySetName] + "Controller"
删除Web API路由。
<德尔> config.Routes.MapHttpRoute(..);
德尔>
然后,请求Uri应该返回你想要的。感谢。