网页API和OData-将多个参数传递 [英] Web API and OData- Pass Multiple Parameters

查看:642
本文介绍了网页API和OData-将多个参数传递的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

时有可能得到的OData做到以下几点?我希望能够通过传递参数比可能不是主键来查询一个REST调用。
我可以调用REST方法类似 - > GetReports(22岁,2014年)报告(22岁,2014年)

Is it possible to get OData to do the following? I would like to be able to query a REST call by passing on parameters than may not be the primary key. Can I call a REST method like --> GetReports(22, 2014) or Reports(22, 2014)?

[HttpGet]
[ODataRoute("Reports(Id={Id}, Year={Year})")]
public IHttpActionResult GetReports([FromODataUri]int Id, [FromODataUri]int Year)
{
    return Ok(_reportsRepository.GetReports(Id, Year));
}

这里是我的最新变化。

  //Unbound Action  OData v3
       var action = builder.Action("ListReports");
        action.Parameter<int>("key");
        action.Parameter<int>("year");
        action.ReturnsCollectionFromEntitySet<Report>("Reports");

我的控制器ReportsController方法

[HttpPost]
            [EnableQuery]
             public IHttpActionResult ListReports([FromODataUri] int key, ODataActionParameters parameters)

            {

                if (!ModelState.IsValid)
                {
                    throw new HttpResponseException(HttpStatusCode.BadRequest);
                }


                int year = (int)parameters["year"];
                return Ok(_reportsRepository.GetReports(key, year).Single());

            }

我试着打电话喜欢的网址:

 http://localhost:6064/odata/Reports(key=5,year=2014)/ListReports

没有HTTP资源发现,请求URI匹配'的http://本地主机:6064 / ODATA /报告(关键%3D5%2Cyear%3D2014)/ ListReports .`

No HTTP resource was found that matches the request URI 'http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'.`

推荐答案

您可以定义一个名为GetReports函数导入有两个参数。

You can define a function import named GetReports that has two parameters.

(注意:此功能导入的名字不能与实体集名称相同)

配置您的EDM模型:

        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<Report>("Reports");
        var function = builder.Function("GetReports");
        function.Parameter<int>("Id");
        function.Parameter<int>("Year");
        function.ReturnsCollectionFromEntitySet<Report>("Reports");
        var model = builder.GetEdmModel();

,然后写你的方法如下:

And then write your method as:

       [HttpGet]
         [ODataRoute("GetReports(Id={Id},Year={Year})")]
         public IHttpActionResult WhateverName([FromODataUri]int Id, [FromODataUri]int Year)
         {
             return Ok(_reportsRepository.GetReports(Id, Year));
         }

然后请求

Get ~/GetReports(Id=22,Year=2014)

将工作。

这篇关于网页API和OData-将多个参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆