以下是我的实体。我首先使用实体框架代码。
public class Trade
{
public Guid Id { get; set; }
[MaxLength(10)]
public string AssetClass { get; set; }
public TradeBatch Batch { get; set; }
}
public class TradeBatch
{
public TradeBatch()
{
StartedOn = DateTime.Now;
}
public Guid Id { get; set; }
public DateTime StartedOn { get; set; }
public List<Trade> Trades { get; set; }
}
在我的控制器中,我有:
[AcceptVerbs("PATCH")]
public void UpdateTrade(Guid id, Delta<Trade> update)
{
var tradeToUpdate = _repTradeService.GetRepTradeById(id);
update.Patch(tradeToUpdate);
_repTradeService.SaveChanges();
}
当我发出请求(使用fiddler)时,update为null。 这是补丁请求:
PATCH http://localhost:61579/api/RepTrades/4e43b48a-a4fd-4ffc-841d-08dac55deb60 HTTP/1.0
User-Agent: Fiddler
Host: localhost:61579
Content-Length: 55
Content-Type: application/json
{"AssetClass":"Test"}
补丁操作中“更新”的值始终为空。指向原因的任何指示?
答案 0 :(得分:3)
您可能想尝试将内容类型标题设置为application/json;odata=verbose
我刚刚评论但尚未获得声誉。
答案 1 :(得分:1)
您的JSON很好,并且该方法应该尽可能地接受它。您可以通过在PATCH
方法的顶部添加以下代码行来查看确切的错误:
if (!ModelState.IsValid) {
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
}
这样,如果您的JSON根据方法所期望的模型无效,它将返回HTTP 400 Bad Request
消息以及ModelState。该响应的消息将包含ModelState无效的原因。