我使用的是使用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资源。
答案 0 :(得分:2)
OData Action总是使用http动词POST,通常用于对服务器有影响的方法,但是你的控制器方法具有HttpGet
属性,看起来你试图用得到。看看该方法实际上做了什么(只是检索一些数据)我认为你想要一个OData函数而不是一个Action。要执行此操作,只需将Action
来电更改为Function
这样的电话:
FunctionConfiguration personalInfo = builder.Entity<User>().Collection.Function("PersonalInfo");