我並不知道問題怎么描述清楚一些。
事情是這樣的,使用 Microsoft Dynamics CRM Server 2016 做CRM系統的時候用到 使用 Web API 執行批處理操作(參見SDK或者 https://msdn.microsoft.com/zh-cn/mt607719 ).
官方只給出 相應報文的 文本。告訴你 響應頭 怎么寫,相應體 怎么寫,而我要做的是用c# 實現它。
首先 我使用了 谷歌瀏覽器 的一個插件,叫 postmen ,第一次聽同學說起,還下載錯了,下載了 成了 桌面應用程序,其實 是插件。
為啥我用插件呢,因為網站需要登錄才能調API啊。需要共享秘鑰。
就長這樣哈。
然后照着官網的例子,改改就測試通過了。
接下來 就要寫 c#代碼了。
然后遇到問題了。
不知道怎么 生成Content-Type: multipart/mixed;boundary=changeset_BBB456 !!!
首先嘗試了HttpClient 類, DefaultRequestHeaders.TryAddWithoutValidation 方法試了試,不行,位置不對。
StringContent 類試了試 也不行。
最后發現 了 MultipartContent類,果斷可以了。
代碼如下哈,因為里面有項目封裝的一些東西,copy過去 是不能用的哈,意思就這意思。
public static ApiResult PostBatch() { object obj = new object(); string url = "$batch"; var batchUniqueIdHeader = "batch_AAA123";//Guid.NewGuid().ToString(); ICredentials credentials = null; EnsureCredentials(ref credentials); using (var client = new CRMClient(credentials, null)) { var data = new { neo_phonesysstatus = 110000001 }; var multipartContent = new MultipartContent("mixed", "batch_AAA123"); var stringContent = new StringContent(string.Format(@" --{0} Content-Type: application/http Content-Transfer-Encoding:binary Content-ID: 1 PATCH http://dev.crm.xiaoniu66.com/DevCRM/api/data/v8.0/neo_marketings(B1D14BC0-2B6B-E611-80C4-005056A97E8D) HTTP/1.1 Content-Type: application/json;type=entry {1} --{0}-- ", "changeset_BBB456", data.ToJson())); stringContent.Headers.Clear(); stringContent.Headers.Add("Content-Type", "multipart/mixed;boundary=batch_AAA123"); multipartContent.Add(stringContent); HttpResponseMessage response = client.PostAsync(url, multipartContent).Result; var result = HandleApiResult(response); return result; } }
其中 遇到的幾個問題是,要記住 響應頭 必須 和 相應體 中間隔着空行。