WebAPI OData v4 - 使用类来表示动作的参数

时间:2014-11-03 21:02:11

标签: asp.net-web-api odata odata-v4

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

我知道我可以将我的类的属性指定为单独的参数,但这样做难以维护,并且我将丢失数据注释验证。有办法解决这个问题吗?

0 个答案:

没有答案