2016-07-31 36 views
0

我正在使用启用了OData的ASP.Net WebApi(使用ODataController)。OData WebApi:自定义操作不起作用

我有一个要求来完成我需要添加一个自定义操作,但不工作,它看起来我错过了什么,有人可以让我知道我在做什么错了?

在此先感谢!

下面是我的实现代码片段。在ODataConfig

builder.EntitySet<User>(typeof(User).Name); 
ActionConfiguration personalInfo = builder.Entity<User>().Collection.Action("PersonalInfo"); 

自定义操作

[HttpGet] 
[Queryable] 
public IQueryable<User> PersonalInfo() 
{ 
    int UserID = this.UserTicket.User_ID; 
    return _users.Queryable().Where(d => d.UserID == UserID); 
} 

添加行为产生的元数据

<FunctionImport Name="PersonalInfo" IsBindable="true" m:IsAlwaysBindable="true"> 
    <Parameter Name="bindingParameter" Type="Collection(Models.User)" Nullable="false"/> 
</FunctionImport> 

编辑1

我错过了提,下面是我从预期网址收到错误消息:匹配请求URI“http://domain/odata/User/PersonalInfo

没有HTTP资源被发现。

+0

以何种方式是不工作? – DavidG

+0

你试过这个URL而不是'http:// domain/odata/PersonalInfo'吗? – DavidG

+0

@DavidG给'资源找不到'! – ANKIT

回答

1

一个OData动作总是使用http动词POST并且通常用于对服务器有影响的方法,但是您的控制器方法具有HttpGet属性,它看起来像您试图用GET调用此方法。看看这个方法实际上做了什么(只是检索一些数据)我认为你想要一个OData函数而不是一个Action。要做到这一点,只是改变你Action电话是一个Function调用是这样的:

FunctionConfiguration personalInfo = builder.Entity<User>().Collection.Function("PersonalInfo"); 
+0

我的OData函数库中缺少函数,是最新的吗? – ANKIT

+0

仍然无法找到功能关键字,请让我知道,如果在最新的图书馆可用? – ANKIT

+0

您使用的是哪个版本的OData? – TomDoesCode