我有一个使用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的用户权限。