如何让OData Web Api 2.2控制器从函数中返回复杂类型?

时间:2014-11-07 19:36:45

标签: c# odata asp.net-web-api owin

我有一个使用OData 4控制器的自托管Web API。我正在尝试创建一个返回Object的函数。

        ODataModelBuilder builder = new ODataConventionModelBuilder();

        builder.EntitySet<User>(typeof (User).Name);
        builder.EntitySet<UserGroup>(typeof (UserGroup).Name);
        builder.EntitySet<SystemAccount>(typeof (SystemAccount).Name);

        builder.Namespace = "UserService";
        builder.EntityType<User>().Action("GetPermissions").Returns<PermissionContainer>();

        config.MapODataServiceRoute("odata", null, builder.GetEdmModel());
        config.AddODataQueryFilter();

这是我的控制器方法

    // GET: /User(5)/GetPermissions
    [HttpGet]
    public IHttpActionResult GetPermissions(int key)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest();
        }

        return Ok(_userService.GetPermissionsByUserId(key));
    }

当我运行此应用程序时,我得到以下

  

发生了'System.ArgumentException'类型的未处理异常   System.Web.OData.dll

     

其他信息:无法配置“Model.User”类型   作为ComplexType。它以前配置为EntityType。

我想要做的是使用URL“/ User(101)/ GetPermissions”返回对象类型PermissionContainer。

此外,PermissionContainer不是实体。它是我创建的一个类,它具有数字bool值,表示基于实体类型Users和UserGroups的用户权限。

0 个答案:

没有答案