【问题标题】:OData routing and actionOData 路由和操作
【发布时间】:2016-03-08 12:20:09
【问题描述】:

来自其他网站的示例:

在 WebApiConfig.cs 中

EntitySetConfiguration<ContactType> contactType = builder.EntitySet<ContactType>("ContactType");
var actionY = contactType.EntityType.Action("ChangePersonStatus");
actionY.Parameter<string>("Level");
actionY.Returns<bool>();

var changePersonStatusAction = contactType.EntityType.Collection.Action("ChangePersonStatus");
changePersonStatusAction.Parameter<string>("Level");
changePersonStatusAction.Returns<bool>();

在 ContactTypeController 中

[HttpPost]
[ODataRoute("Default.ChangePersonStatus")]
public IHttpActionResult ChangePersonStatus(ODataActionParameters parameters)
{
  if (ModelState.IsValid)
  {
   var level = parameters["Level"];
   // SAVE THIS TO THE DATABASE OR WHATEVER....
   }
   return Ok(true);
}

现在可以调用动作了:

For the Entity:
http://localhost:51902/odata/ContactType(5)/Default.ChangePersonStatus
For the Entity Collection:
http://localhost:51902/odata/ContactType/Default.ChangePersonStatus

我不明白我们如何在操作中检索 Id = 5 的 ContactType 并在使用 ..odata/ContactType(5)/Default.ChangePersonStatus 时通过此 ID 将某些内容保存到数据库 链接

【问题讨论】:

    标签: asp.net-web-api odata asp.net-web-api2


    【解决方案1】:

    对于实体集合:

    http://localhost:51902/odata/ContactType/Default.ChangePersonStatus
    

    你在控制器中的方法应该如下:

    [HttpPost]
    [ODataRoute("ContactType/Default.ChangePersonStatus")]
    public IHttpActionResult ChangePersonStatus(ODataActionParameters parameters)
    {
      ...
    }
    

    对于实体:

    http://localhost:51902/odata/ContactType(5)/Default.ChangePersonStatus
    

    你在控制器中的方法应该如下:

    [HttpPost]
    [ODataRoute("ContactType({key})/Default.ChangePersonStatus")]
    public IHttpActionResult ChangePersonStatus(int key, ODataActionParameters parameters)
    {
      ...
    }
    

    key 的值为 5

    【讨论】:

    • 我在浏览器中测试了这些链接,它们都进入了我编写的操作。这是否意味着实体的 url 中省略了 (5)?
    【解决方案2】:

    要引用单个实体,您需要在键之前包含 [FromODataUri]:

    [HttpPost]
    [ODataRoute("ContactType({key})/Default.ChangePersonStatus")]
    public IHttpActionResult ChangePersonStatus([FromODataUri] int key, ODataActionParameters parameters)
    {
      // Code
    }
    

    您现在应该可以在方法中访问您的 id。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 2015-11-14
      • 2015-09-09
      • 2016-06-17
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多