【发布时间】:2015-07-06 02:46:12
【问题描述】:
我想在我的 OData 控制器中添加一个自定义操作来添加实体。我可以在 OData 控制器中提供的标准 Post 方法中执行此操作,但是如果我添加关联,当我从数据库刷新控制器时,我有一些自定义代码会被覆盖。
这是我添加的自定义方法
[HttpPost]
public IHttpActionResult CreateValidCombination(ValidCombination validCombination)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return Ok();
}
请求头与标准post方法相同
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”类型的参数,而客户方法将其接收为 null。
我在 fiddler 中检查了请求标头和正文,在这两种情况下都相同。我什至尝试将 [FromBody] 放在参数前面,但无济于事。我正在尝试为我的自定义方法获取参数值。
以前有没有人遇到过这种情况。有没有一种方法可以调试为什么参数没有被正确反序列化,即使这两种方法的请求和正文相同?
【问题讨论】:
标签: c# asp.net-web-api parameters odata