[英]Dynamics CRM Online and Web API : Method Tunneling through POST
我正在使用 Dynamics CRM 2016 Online,我想使用 Web API (odata 4.0) 端点更新实体(例如联系人)。
我使用 Fiddler 来测试请求。 以下是请求的详细信息:
PATCH https://XXXXXXXXXXX/api/data/v8.0/contacts(6b902ae1-19ed-e511-80e3-5065f3890551)
User-Agent: Fiddler
Host: XXXXXXXXX
Content-Length: 54
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer XXXXXXXX
{
"firstname": "John",
"lastname": "Doe"
}
它运作良好。 问题是客户端不支持 PATCH 动词。
odata 端点可以通过使用 POST 和额外的 HTTP 标头来处理此限制。 从文档中引用:
为了帮助解决此限制,OData 服务器可以通过 POST 支持方法隧道。 可以通过隧道执行的方法是 MERGE、PUT 和 DELETE。
要使用方法隧道发出请求,客户端根据需要设置带有正文和标头的请求,但使用 POST 作为 HTTP 方法而不是实际需要的方法。 然后再添加一个标头“X-HTTP-Method”,并赋予它值 MERGE、PUT 或 DELETE。
服务器必须检查 POST 请求是否将 X-HTTP-Method 标头设置为有效值之一,如果是,则执行请求的其余部分,就好像标头值是它的实际 HTTP 方法一样。
但是当我尝试使用 POST 而不是 PATCH 并使用附加标头执行相同的请求时,我收到一个错误:
message=Unmapped Request found, PathTemplate:~/entityset/key, HttpVerb:POST
我还尝试使用此处描述的 X-HTTP-Method-Override 标头,但结果相同。
我这边有错误还是端点不支持此功能? 谢谢。
使用 PATCH(但你说不支持这个)。
使用 PUT(注意 PUT,您必须指定属性 URL/{attribute},这会强制您为每个属性进行 PUT 调用,这不是完美的方式,而是某种方式)
这对我有用,而不是 POST。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.