vb.net - CRM16 - 从 WebApi 触发自定义操作

标签 vb.net asp.net-web-api dynamics-crm crm dynamics-crm-webapi

我在 CRM 中构建了一个自定义操作,我需要通过它的 WebAPI 触发它。自定义操作已激活,创建时我在 CRM 中没有任何错误。

enter image description here

我尝试从 VB.NET 应用程序中调用此操作,例如:

Dim httpch As New HttpClientHandler
Dim requestUri As String = "contacts(1fcfd54a-15d3-e611-80dc-0050569ea396)/Microsoft.Dynamics.CRM.new_addnotetocontact"
httpch.Credentials = New NetworkCredential("username", "password", "domain")
Dim httpClient As New HttpClient(httpch)
httpClient.BaseAddress = New Uri(CRMWebApiUri)
httpClient.Timeout = New TimeSpan(0, 2, 0)
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0")
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0")
httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations='OData.Community.Display.V1.FormattedValue'")
httpClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
Dim jsonNote As JObject = New JObject(New JProperty("NoteTitle", "'Mails have been deleted'"), New JProperty("NoteText", "This contacts SmarterMail data has been deleted due to inactivity"))
Dim postData = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json")

Dim retrieveContactResponse As HttpResponseMessage = httpClient.PostAsync(requestUri, postData).Result

我得到的是带有消息的状态 400:

Request message has unresolved parameters.



我可以向同一站点调用其他电话并获取所有联系人作为示例

这是什么意思,我该如何解决?

最佳答案

我前段时间解决了这个问题,但没有时间回来回答它。就我而言,问题是我自己提出请求的方式

而不是问题中所述的以下方式:

Dim postData = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json")
Dim retrieveContactResponse As HttpResponseMessage = httpClient.PostAsync(requestUri, postData).Result

我没有使用 httpClient.PostAsync 方法并直接提供 StringContent 对象,而是使用 HttpRequestMessage 对象并提供 StringContent 对象,然后将 HttpRequestMessage 对象提供给 httpClient 的 SendAsync 方法,这似乎解决了我的问题,因为它现在正在工作。另请注意,在原始问题中,我在要发布的 JObject 中的第一个 JProperty 的值中有引号,但我不确定这与它有什么关系,但只是将它发布在这里,因为它与原始的不同代码:
Dim jsonNote As JObject = New JObject(New JProperty("NoteTitle", "Mails have been deleted"), New JProperty("NoteText", "This contact's SmarterMail data has been deleted automatically due to inactivity on their CRM account"))
...
Dim reqMsg As New HttpRequestMessage(HttpMethod.Post, CRMWebApiUri + requestUri)
reqMsg.Content = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json")
Dim retrieveContactResponse As HttpResponseMessage = httpClient.SendAsync(reqMsg).Result

关于vb.net - CRM16 - 从 WebApi 触发自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828266/

相关文章:

mysql - 如何检测 datagridview 列中的相同数据?

asp.net - 单击按钮时动态添加新文本框

c# - MongoDB + .NET Core 1.0?

java - 如何通过Java连接在Azure Cloud上运行的Dynamics CRM 2016实例?

.net - 我需要一种快速而肮脏的方法来附加到 vb.net 中的文本文件

vb.net - 悬停时显示问题

c# - 从模型数组中透视 json 数据

c# - 将 POST 参数传递给 WEB API2

c# - 从 CRM 沙盒插件调用 WCF(使用生成的客户端)抛出 System.Security.SecurityException

dynamics-crm - 如何安全地忽略 Dynamics CRM 插件中的错误?