Delta for Patch为null

时间:2013-08-30 14:12:03

标签: asp.net-web-api

以下是我的实体。我首先使用实体​​框架代码。

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"}

补丁操作中“更新”的值始终为空。指向原因的任何指示?

2 个答案:

答案 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无效的原因。