2

我想向我的 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":"..."}

我知道我可以将我的类的属性指定为单独的参数,但这会更难维护,而且我会丢失数据注释验证。有没有办法处理这个?

4

0 回答 0