【问题标题】:OData WebApi: Custom action not workingOData WebApi:自定义操作不起作用
【发布时间】:2016-07-31 09:44:06
【问题描述】:

我正在使用启用了 OData(使用 ODataController)的 ASP.Net WebApi。

我有一个要求要完成,我需要添加一个自定义操作,但它不起作用,看起来我错过了一些东西,谁能告诉我我做错了什么?

提前致谢!!

以下是我的实现的代码 sn-ps。

自定义操作

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

在 ODataConfig 中添加操作

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

生成的元数据

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

编辑 1

我错过了,以下是我从预期 url 收到的错误:

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

【问题讨论】:

  • 在什么情况下不工作?
  • 您是否尝试过这个网址而不是http://domain/odata/PersonalInfo
  • @DavidG 给出“找不到资源”!!
  • @DavidG 虽然我在同一个控制器中的第二个自定义 POST 操作工作正常,但不知道为什么会失败!!

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


【解决方案1】:

OData 操作始终使用 http 动词 POST,并且通常用于对服务器有影响的方法,但是您的控制器方法具有 HttpGet 属性,看起来您正尝试使用 GET 调用它。查看该方法的实际作用(只是检索一些数据),我认为您希望拥有一个 OData 函数而不是一个动作。为此,只需将您的 Action 调用更改为 Function 调用,如下所示:

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

【讨论】:

  • 我的 OData 库中缺少函数,是最新的吗?
  • 仍然找不到 Function 关键字,请问最新库中是否有该关键字?
  • 您使用的是哪个版本的 OData?
  • 我明白了,谢谢!您能建议我如何将多个参数添加到绑定到集合的操作中吗?
  • 你找到Action函数了吗? ActionConfiguration 类应该有一个添加参数的方法
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 2014-09-29
  • 2015-04-10
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多