我想在我的OData控制器中添加一个自定义操作来添加实体。我可以在OData控制器中提供的标准Post方法中做到这一点但我有一些自定义代码,如果我添加一个关联,当我从数据库刷新控制器时会被覆盖。
这是我添加的自定义方法
[HttpPost]
public IHttpActionResult CreateValidCombination(ValidCombination validCombination)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return Ok();
}
请求标头与标准发布方法
相同POST http://localhost:20152/Admin/odata/ValidCombinations/fn.CreateValidCombination HTTP/1.1
Accept: */*
Content-Type: application/json
Referer: http://localhost:20152/Admin/index.html
Accept-Language: en-CA,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Connection: Keep-Alive
Content-Length: 284
DNT: 1
Host: localhost:20152
Pragma: no-cache
Action在WebApiConfig.cs中配置为
builder.EntityType<ValidCombination>().Collection
.Action("CreateValidCombination")
.Returns<IHttpActionResult>();
问题是当标准OData Contoller Post方法正确接收“ValidCombination”类型的参数时,customer方法将其接收为null。
我在fiddler中检查过请求标题和正文,两种情况都是如此。我甚至尝试将[FromBody]放在参数前面,但无济于事。我试图为我的自定义方法的参数获取值。
之前有没有人遇到过这种情况。有没有办法我可以调试为什么参数没有被正确反序列化,即使这两个方法的请求和正文相同?