我喜欢在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;
答案 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");
}
}