【问题标题】:Client OData Patch without retrieving object first?没有先检索对象的客户端 OData 补丁?
【发布时间】:2014-08-04 13:42:55
【问题描述】:

我正在使用此处描述的 C# OData 4 客户端:

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-client-app

我有一个产品类别,它有一个 ID、名称、价格和类别。我想做类似的事情:

        var product = new ProductService.Models.Product { 
          Id = 2,
          Price = 4
        };

        container.AttachTo("Products", product);
        container.UpdateObject(product);

这样我就可以只更新 price 属性而忽略其余所有属性。我可以看到这不起作用,因为 Name 和 Category 在创建 Product 对象时被创建为 null,因此它们将在生成的请求中作为 null 发送。

有没有办法在不首先检索我要更新的对象的情况下做到这一点? (我猜我需要走 HttpClient 路线)。

【问题讨论】:

  • 只是好奇你为什么不想先检索对象?
  • @QianLi。当完全相同的查询将在 PATCH 方法本身中运行时,这是对数据库的另一次访问。我的应用程序将是 MVC 应用程序,因此将是无状态的,因此如果我正在编辑记录,它不会将干净的版本保留在内存中。做类似上面的事情也会更简单。你能想出在这种情况下首先检索对象的充分理由吗?
  • 是合并属性(PATCH)还是替换实体(PUT)?

标签: c# odata asp.net-web-api2


【解决方案1】:

一种解决方法是直接使用 HttpClient:

        HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), requestUri);
        request.Content = new StringContent(@"{{""@odata.type"":""#ProductService.Models.Product"",""Price"":3000}}");
        request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
        HttpResponseMessage  response = new HttpClient.SendAsync(request).Result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多