web-dev-qa-db-ja.com

Web APIとOData-複数のパラメーターを渡す

ODataに以下を実行させることは可能ですか? REST主キーではない可能性のあるパラメータを渡すことで、呼び出しをクエリできるようにしたいと思います。REST > GetReports(22, 2014)または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());

            }
_

RLを次のように呼び出してみました

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

要求URI 'http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'。 `に一致するHTTPリソースが見つかりませんでした

17
Nate

2つのパラメーターを持つGetReportsという名前の関数インポートを定義できます。

(注:関数インポートの名前は、エンティティセット名と同じにすることはできません)

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();

次に、メソッドを次のように記述します。

[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)

働くでしょう。

27
Feng Zhao