繁体   English   中英

Dynamics CRM Online 和 Web API:通过 POST 的方法隧道

[英]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。

https://msdn.microsoft.com/en-us/library/mt607664.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM