我想向我的 OData 控制器添加一个操作。我将使用与以下结构匹配的请求正文和以下验证要求来调用此操作:
public class PublishModel
{
[Required, EnumDataType(typeof(JobEventType))]
public JobEventType Type { get; set; }
[Required, StringLength(100)]
public string ExternalRef { get; set; }
public DateTimeOffset? DateTime { get; set; }
}
使用普通的 ApiController,我通常会让我的控制器方法简单地采用这种类型的参数,并且它会起作用。对于 OData,看来我必须使用 ODataActionParameters 参数来实现我的方法。
我不知道我应该如何告诉 OData 请求的正文应与上述内容匹配。我最接近的是让它在一个参数中期望它:
var pa = mb.EntityType<Edm.JobEvent>().Collection.Action("publish");
pa.ReturnsFromEntitySet<Edm.JobEvent>("jobevent");
pa.Parameter<PublishModel>("evt");
但这需要我发送
{"evt":{"type":"...","externalRef":"...","dateTime":"..."}}
当我想发送的只是
{"type":"...","externalRef":"...","dateTime":"..."}
我知道我可以将我的类的属性指定为单独的参数,但这会更难维护,而且我会丢失数据注释验证。有没有办法处理这个?