OData v3 OdataActionParameter参数Null Value返回

时间:2014-07-11 15:56:52

标签: odata

任何想法为什么我的参数被返回为null? 这是我的控制器。

[HttpPost]
[EnableQuery]
public IHttpActionResult LoadReports(ODataActionParameters parameters)
{

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

    int key = (int)parameters["id"];  
    int year = (int)parameters["year"];

    return Ok(_reportsRepository.GetReports(key, year).Single());

}

---我的实体集

 builder.EntitySet<Report>("Reports");

- MyEntity绑定

var action = builder.Entity<Report>().Collection.Action("LoadReports");
        action.Parameter<int>("id");
        action.Parameter<int>("year");
        action.ReturnsFromEntitySet<Report>("Reports");

- 我的网址调用

http://localhost:6064/odata/Reports/LoadReports?id=5&year=2011

- 我的错误消息

   ReportsController.LoadReports(ODataActionParameters parameters) in \Controllers\ReportsController.cs:line 56
   at lambda_method(Closure , Object , Object[] )
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)

1 个答案:

答案 0 :(得分:1)

不幸的是,只有v4支持可以使用GET执行的功能。

使用v3,如果要在模型中定义操作并发送GET请求,则需要编写唯一的路由约定,以将请求路由到右侧控制器中的正确方法。

默认操作路由约定仅接受POST。

在方法中,您可以从Request的查询部分而不是ODataActionParameters中获取参数。