我在使用 Web API 2 (.net 4.5.1) 时遇到问题,因为它似乎忽略属性为整数的 PATCH 请求,但处理其他类型时没有问题(我已经测试了字符串和小数) 。
\n\n我\xe2\x80\x99在http://playapi.azurewebsites.net/api/products上设置了一个带有“products”控制器的不安全测试 API 。如果您对该 URL 执行 GET,您\xe2\x80\x99 将得到类似以下产品的信息:
\n\n{"Id": 1,"Name": "Xbox One","Category": "gaming","Price": 300,"Stock": 5}\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x98Name\xe2\x80\x99 和 \xe2\x80\x98Category\xe2\x80\x99 都是字符串,\xe2\x80\x98Price\xe2\x80\x99 是 Decimal,\xe2\x80\ x98Stock\xe2\x80\x99 是一个整数。
\n\n如果您发送这些请求,它们都会起作用(您\xe2\x80\x99将获得更新实体的 200/OK):
\n\n{"Price": 600.00}{"Category": "Electronics"}但是,如果您发送此信息,它会返回 200/OK,但不会进行更新,库存仍保持原始值
\n\n{"Stock": 4}我的控制器代码是相当标准的样板代码(来自脚手架的 ODATA 控制器,但移至标准 API 控制器):
\n\n// PATCH: api/Products/5\n[AcceptVerbs("PATCH", "MERGE")]\npublic async Task<IHttpActionResult> PatchOrder(int id, Delta<Product> patch)\n{\n …Run Code Online (Sandbox Code Playgroud)