小编Rud*_*dyW的帖子

OData v4自定义功能

我正在尝试在OData v4 Web API解决方案中创建自定义函数.我需要返回基于OData本身无法处理的独特逻辑的"Orders"集合.我似乎无法弄清楚如何在不破坏整个OData服务层的情况下创建这个自定义函数.当我使用ODataRoute属性修饰Controller方法时,它都会变成地狱.任何基本请求都会产生相同的错误.有人可以看看下面的代码,看看你是否注意到我必须遗漏的东西?

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.MapODataServiceRoute("odata", "odata", model: GetModel());
    }

    public static Microsoft.OData.Edm.IEdmModel GetModel()
    {
        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Account>("Accounts");
        builder.EntitySet<Email>("Emails");
        builder.EntitySet<PhoneNumber>("PhoneNumbers");
        builder.EntitySet<Account>("Accounts");
        builder.EntitySet<Address>("Addresses");
        builder.EntitySet<Order>("Orders");
        builder.EntitySet<OrderDetail>("OrderDetails");

        var orders = builder.EntityType<Order>();
        var function = orders.Function("GetByExternalKey");
        function.Parameter<long>("key");
        function.ReturnsCollectionFromEntitySet<Order>("Orders");

        return builder.GetEdmModel();
     }
 }
Run Code Online (Sandbox Code Playgroud)

OrdersController.cs

public class OrdersController : ODataController
{
    private SomeContext db = new SomeContext();

    ...Other …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api asp.net-web-api-odata

6
推荐指数
1
解决办法
9949
查看次数