OData WebApi:自定义操作不起作用

时间:2016-07-31 09:44:06

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

我使用的是使用OData启用的ASP.Net WebApi(使用ODataController)。

我有一个要求要完成我需要添加一个自定义动作但是不起作用,它看起来我错过了什么,有人能告诉我我在哪里做错了吗?

提前致谢!!

以下是我的实施的代码段。

自定义操作

SELECT date(t1.date_time) AS date, t1.altpn as PN, COUNT(t2.id) AS count 
FROM test_results t1
LEFT JOIN test_results t2 ON t2.id=t1.id
  AND 
  (t2.error1 = 1000 OR t2.error1 = 1001 OR t2.error2 = 1000 
  OR t2.error2 = 1001 OR t2.error3 = 1000 OR t2.error3 = 1001) 
GROUP BY date(t1.date_time), t1.altpn 
ORDER BY date(t1.date_time), t1.altpn

在ODataConfig中添加操作

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

生成的元数据

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

编辑1

我错过了提及,下面是我从预期网址收到的错误:

未找到与请求URI“http://domain/odata/User/PersonalInfo”匹配的HTTP资源。

1 个答案:

答案 0 :(得分:2)

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

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