我想向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":"..."}
我知道我可以将我的类的属性指定为单独的参数,但这样做难以维护,并且我将丢失数据注释验证。有办法解决这个问题吗?