在C#中声明一个类作为OData操作的参数

时间:2017-01-19 01:51:35

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

我喜欢在WebAPI中如何将定义的模型作为参数放在控制器的方法中。我转而使用OData,我发现使用数据结构的每个例子都是在模型构建器中定义它

var action = builder.Action("MyAction").ReturnsCollection<int>();
action.Parameter<int>("ProgramId");
action.Parameter<int>("BrandId");
action.Parameter<int>("StoreId");
action.Parameter<OperationStatus>("Status");

然后在控制器中,您必须手动从ODataParameter字典中获取这些值。我发现这很乏味。 同样在WebAPI方式中,您可以在编译时或通过VisualStudio intelisense捕获错误,并使用注释进行验证。

还有其他方法可以将参数传递给某个动作吗?更像是WebAPI&#34; perks&#34;

1 个答案:

答案 0 :(得分:0)

您可以将自定义DTO作为OdataAction的参数。 例如,注册代码如下:

var action = builder.Action("MyAction");
action.Parameter<OperationStatus>("Status");
action.ReturnsCollection<int>("Results");

请求的Json有效负载如下:

{
    "Status": {
        "Property1":"value",
        "Property2":"value"
    }
}

控制器中的动作声明:

[HttpPost]
[ODataRoute("MyAction")]
public async Task<IHttpActionResult> MyAction(ODataActionParameters parameters)
{
    OperationStatus status;
    if (!parameters.TryGetValue("Status",out status))
    {
        return BadRequest("Missing parameter Status");
    }
}